org.jgroups.blocks
Class DistributedLockManager

java.lang.Object
  extended by org.jgroups.blocks.DistributedLockManager
All Implemented Interfaces:
LockManager, TwoPhaseVotingListener, VoteResponseProcessor

public class DistributedLockManager
extends java.lang.Object
implements TwoPhaseVotingListener, LockManager, VoteResponseProcessor

Distributed lock manager is responsible for maintaining the lock information consistent on all participating nodes.

Version:
$Id: DistributedLockManager.java,v 1.6 2005/06/08 15:56:54 publicnmi Exp $
Author:
Roman Rokytskyy (rrokytskyy@acm.org), Robert Schaffar-Taurok (robert@fusion.at)

Nested Class Summary
static class DistributedLockManager.AcquireLockDecree
          This class represents the lock to be released.
static class DistributedLockManager.LockDecree
          This class represents the lock
static class DistributedLockManager.MultiLockDecree
          This class represents the lock that has to be marked as multilocked
static class DistributedLockManager.ReleaseLockDecree
          This class represents the lock to be released.
 
Field Summary
protected  org.apache.commons.logging.Log log
           
 
Constructor Summary
DistributedLockManager(TwoPhaseVotingAdapter channel, java.lang.Object id)
          Constructor for the DistributedLockManager_cl object.
DistributedLockManager(VotingAdapter voteChannel, java.lang.Object id)
          Create instance of this class.
 
Method Summary
 void abort(java.lang.Object decree)
          Abort phase for the lock acquisition or release.
 boolean commit(java.lang.Object decree)
          Commit phase for the lock acquisition or release.
 void lock(java.lang.Object lockId, java.lang.Object owner, int timeout)
          Locks an object with lockId on behalf of the specified owner.
 boolean prepare(java.lang.Object decree)
          Prepare phase for the lock acquisition or release.
 boolean processResponses(RspList responses, int consensusType, java.lang.Object decree)
          Processes the response list and votes like the default processResponses method with the consensusType VOTE_ALL If the result of the voting is false, but this DistributedLockManager owns the lock, the result is changed to true and the lock is released, but marked as multiple locked.
 void unlock(java.lang.Object lockId, java.lang.Object owner)
          Unlocks an object with lockId on behalf of the specified owner.
 void unlock(java.lang.Object lockId, java.lang.Object owner, boolean releaseMultiLocked)
          Unlocks an object with lockId on behalf of the specified owner.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected final org.apache.commons.logging.Log log
Constructor Detail

DistributedLockManager

public DistributedLockManager(VotingAdapter voteChannel,
                              java.lang.Object id)
Create instance of this class.

Parameters:
voteChannel - instance of VotingAdapter that will be used for voting purposes on the lock decrees. voteChannel() will be wrapped by the instance of the TwoPhaseVotingAdapter.
id - the unique identifier of this lock manager.
To do:
check if the node with the same id is already in the group.

DistributedLockManager

public DistributedLockManager(TwoPhaseVotingAdapter channel,
                              java.lang.Object id)
Constructor for the DistributedLockManager_cl object.

Parameters:
channel - instance of TwoPhaseVotingAdapter that will be used for voting purposes on the lock decrees.
id - the unique identifier of this lock manager.
To do:
check if the node with the same id is already in the group.
Method Detail

lock

public void lock(java.lang.Object lockId,
                 java.lang.Object owner,
                 int timeout)
          throws LockNotGrantedException,
                 ChannelException
Locks an object with lockId on behalf of the specified owner.

Specified by:
lock in interface LockManager
Parameters:
lockId - Object representing the object to be locked.
owner - object that requests the lock.
timeout - time during which group members should decide whether to grant a lock or not.
Throws:
LockNotGrantedException - when the lock cannot be granted.
java.lang.ClassCastException - if lockId or owner are not serializable.
ChannelException - if something bad happened to underlying channel.

unlock

public void unlock(java.lang.Object lockId,
                   java.lang.Object owner)
            throws LockNotReleasedException,
                   ChannelException
Unlocks an object with lockId on behalf of the specified owner. since 2.2.9 this method is only a wrapper for unlock(Object lockId, Object owner, boolean releaseMultiLocked). Use that with releaseMultiLocked set to true if you want to be able to release multiple locked locks (for example after a merge)

Specified by:
unlock in interface LockManager
Parameters:
lockId - long representing the object to be unlocked.
owner - object that releases the lock.
Throws:
LockNotReleasedException - when the lock cannot be released.
java.lang.ClassCastException - if lockId or owner are not serializable.
ChannelException - if something bad happened to communication channel.

unlock

public void unlock(java.lang.Object lockId,
                   java.lang.Object owner,
                   boolean releaseMultiLocked)
            throws LockNotReleasedException,
                   ChannelException,
                   LockMultiLockedException
Unlocks an object with lockId on behalf of the specified owner.

Specified by:
unlock in interface LockManager
Parameters:
lockId - long representing the object to be unlocked.
owner - object that releases the lock.
releaseMultiLocked - releases also multiple locked locks. (eg. locks that are locked by another DLM after a merge)
Throws:
LockNotReleasedException - when the lock cannot be released.
java.lang.ClassCastException - if lockId or owner are not serializable.
LockMultiLockedException - if releaseMultiLocked is true and a multiple locked lock has been released.
ChannelException - if something bad happened to communication channel.

prepare

public boolean prepare(java.lang.Object decree)
                throws VoteException
Prepare phase for the lock acquisition or release.

Specified by:
prepare in interface TwoPhaseVotingListener
Parameters:
decree - should be an instance LockDecree, if not, we throw VoteException to be ignored by the VoteChannel.
Returns:
true when preparing the lock operation succeeds.
Throws:
VoteException - if we should be ignored during voting.

commit

public boolean commit(java.lang.Object decree)
               throws VoteException
Commit phase for the lock acquisition or release.

Specified by:
commit in interface TwoPhaseVotingListener
Parameters:
decree - should be an instance LockDecree, if not, we throw VoteException to be ignored by the VoteChannel.
Returns:
true when commiting the lock operation succeeds.
Throws:
VoteException - if we should be ignored during voting.

abort

public void abort(java.lang.Object decree)
           throws VoteException
Abort phase for the lock acquisition or release.

Specified by:
abort in interface TwoPhaseVotingListener
Parameters:
decree - should be an instance LockDecree, if not, we throw VoteException to be ignored by the VoteChannel.
Throws:
VoteException - if we should be ignored during voting.

processResponses

public boolean processResponses(RspList responses,
                                int consensusType,
                                java.lang.Object decree)
                         throws ChannelException
Processes the response list and votes like the default processResponses method with the consensusType VOTE_ALL If the result of the voting is false, but this DistributedLockManager owns the lock, the result is changed to true and the lock is released, but marked as multiple locked. (only in the prepare state to reduce traffic)

Note: we do not support voting in case of Byzantine failures, i.e. when the node responds with the fault message.

Specified by:
processResponses in interface VoteResponseProcessor
Parameters:
responses - The responses
consensusType - The consensusType of the vote
decree - The vote decree
Returns:
boolean
Throws:
ChannelException


Copyright ? 1998-2005 Bela Ban. All Rights Reserved.