org.jgroups.protocols
Class PEER_LOCK
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.Locking
org.jgroups.protocols.PEER_LOCK
public class PEER_LOCK
- extends Locking
Implementation of a locking protocol which acquires locks by contacting all of the nodes of a cluster.
Unless a total order configuration is used (e.g. SEQUENCER
based), lock requests for
the same resource from different senders may be received in different order, so deadlocks can occur. Example:
- Nodes A and B
- A and B call lock(X) at the same time
- A receives L(X,A) followed by L(X,B): locks X(A), queues L(X,B)
- B receives L(X,B) followed by L(X,A): locks X(B), queues L(X,A)
To acquire a lock, we need lock grants from both A and B, but this will never happen here. To fix this, either
add SEQUENCER to the configuration, so that all lock requests are received in the same global order at both A and B,
or use Lock.tryLock(long,java.util.concurrent.TimeUnit)
with retries if a lock
cannot be acquired.
An alternative is also the CENTRAL_LOCK
protocol.
- Since:
- 2.12
- Author:
- Bela Ban
- See Also:
Locking
,
CENTRAL_LOCK
Nested Class Summary |
protected class |
PEER_LOCK.PeerLock
Lock implementation which grants a lock when all non faulty cluster members OK it. |
Methods inherited from class org.jgroups.protocols.Locking |
addLockListener, down, getAddress, getBypassBundling, getLock, getLock, getLock, getOwner, getView, handleAwaitRequest, handleCreateAwaitingRequest, handleCreateLockRequest, handleDeleteAwaitingRequest, handleDeleteAwaitRequest, handleDeleteLockRequest, handleLockDeniedResponse, handleLockGrantedResponse, handleLockRequest, handleSignalRequest, handleSignalResponse, notifyAwaited, notifyAwaiting, notifyLockCreated, notifyLockDeleted, notifyLocked, notifyUnlocked, printLocks, removeClientLock, removeLockListener, sendLockResponse, sendRequest, sendSignalResponse, setBypassBundling, unlockAll, up |
Methods inherited from class org.jgroups.stack.Protocol |
destroy, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getDownServices, getId, getIdsAbove, getLevel, getName, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getUpServices, getValue, init, isErgonomics, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStatistics, resetStats, setDownProtocol, setErgonomics, setId, setLevel, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, start, statsEnabled, stop |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
PEER_LOCK
public PEER_LOCK()
sendGrantLockRequest
protected void sendGrantLockRequest(java.lang.String lock_name,
Owner owner,
long timeout,
boolean is_trylock)
- Specified by:
sendGrantLockRequest
in class Locking
sendReleaseLockRequest
protected void sendReleaseLockRequest(java.lang.String lock_name,
Owner owner)
- Specified by:
sendReleaseLockRequest
in class Locking
sendAwaitConditionRequest
protected void sendAwaitConditionRequest(java.lang.String lock_name,
Owner owner)
- Specified by:
sendAwaitConditionRequest
in class Locking
sendSignalConditionRequest
protected void sendSignalConditionRequest(java.lang.String lock_name,
boolean all)
- Specified by:
sendSignalConditionRequest
in class Locking
sendDeleteAwaitConditionRequest
protected void sendDeleteAwaitConditionRequest(java.lang.String lock_name,
Owner owner)
- Specified by:
sendDeleteAwaitConditionRequest
in class Locking
handleView
public void handleView(View view)
- Overrides:
handleView
in class Locking
createLock
protected Locking.ClientLock createLock(java.lang.String lock_name)
- Overrides:
createLock
in class Locking
Copyright © 1998-2012 Bela Ban / Red Hat. All Rights Reserved.