org.jgroups.blocks
Class DistributedLockManager
java.lang.Object
org.jgroups.blocks.DistributedLockManager
- LockManager, TwoPhaseVotingListener, VoteResponseProcessor
public class DistributedLockManager
extends java.lang.Object
Distributed lock manager is responsible for maintaining the lock information
consistent on all participating nodes.
$Id: DistributedLockManager.java,v 1.6 2005/06/08 15:56:54 publicnmi Exp $- Roman Rokytskyy (rrokytskyy@acm.org)
- Robert Schaffar-Taurok (robert@fusion.at)
void | abort(Object decree) - Abort phase for the lock acquisition or release.
|
boolean | commit(Object decree) - Commit phase for the lock acquisition or release.
|
void | lock(Object lockId, Object owner, int timeout) - Locks an object with
lockId on behalf of the specified
owner .
|
boolean | prepare(Object decree) - Prepare phase for the lock acquisition or release.
|
boolean | processResponses(RspList responses, int consensusType, 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(Object lockId, Object owner) - Unlocks an object with
lockId on behalf of the specified
owner .
|
void | unlock(Object lockId, Object owner, boolean releaseMultiLocked) - Unlocks an object with
lockId on behalf of the specified
owner .
|
log
protected final Log log
DistributedLockManager
public DistributedLockManager(TwoPhaseVotingAdapter channel,
Object id)
Constructor for the DistributedLockManager_cl object.
channel
- instance of TwoPhaseVotingAdapter
that will be used for voting purposes on the lock decrees.id
- the unique identifier of this lock manager.
- check if the node with the same id is already in the group.
DistributedLockManager
public DistributedLockManager(VotingAdapter voteChannel,
Object id)
Create instance of this class.
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.
- check if the node with the same id is already in the group.
abort
public void abort(Object decree)
throws VoteException
Abort phase for the lock acquisition or release.
- abort in interface TwoPhaseVotingListener
decree
- should be an instance LockDecree
, if not,
we throw VoteException
to be ignored by the
VoteChannel
.
commit
public boolean commit(Object decree)
throws VoteException
Commit phase for the lock acquisition or release.
- commit in interface TwoPhaseVotingListener
decree
- should be an instance LockDecree
, if not,
we throw VoteException
to be ignored by the
VoteChannel
.
true
when commiting the lock operation succeeds.
lock
public void lock(Object lockId,
Object owner,
int timeout)
throws LockNotGrantedException,
ChannelException
Locks an object with lockId
on behalf of the specified
owner
.
- lock in interface LockManager
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.
prepare
public boolean prepare(Object decree)
throws VoteException
Prepare phase for the lock acquisition or release.
- prepare in interface TwoPhaseVotingListener
decree
- should be an instance LockDecree
, if not,
we throw VoteException
to be ignored by the
VoteChannel
.
true
when preparing the lock operation succeeds.
processResponses
public boolean processResponses(RspList responses,
int consensusType,
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.
- processResponses in interface VoteResponseProcessor
unlock
public void unlock(Object lockId,
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)
- unlock in interface LockManager
lockId
- long
representing the object to be unlocked.owner
- object that releases the lock.
unlock
public void unlock(Object lockId,
Object owner,
boolean releaseMultiLocked)
throws LockNotReleasedException,
ChannelException,
LockMultiLockedException
Unlocks an object with lockId
on behalf of the specified
owner
.
- unlock in interface LockManager
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)
Copyright B) 1998-2005 Bela Ban. All Rights Reserved.