- All Implemented Interfaces:
public class ZkDistributedCollectionLockFactory extends Object implements DistributedCollectionLockFactoryA distributed lock implementation using Zookeeper "directory" nodes created within a collection znode hierarchy, for use with the distributed Collection API implementation. The locks are implemented using ephemeral nodes placed below the "directory" nodes.
- See Also:
- Zookeeper lock recipe
Constructors Constructor Description
ZkDistributedCollectionLockFactory(SolrZkClient zkClient, String rootPath)
All Methods Instance Methods Concrete Methods Modifier and Type Method Description
createLock(boolean isWriteLock, CollectionParams.LockLevel level, String collName, String shardId, String replicaName)Create a new lock of the specified type (read or write) entering the "competition" for actually getting the lock at the given level for the given path i.e.
doCreateLock(boolean isWriteLock, String lockPath)
public ZkDistributedCollectionLockFactory(SolrZkClient zkClient, String rootPath)
public DistributedLock createLock(boolean isWriteLock, CollectionParams.LockLevel level, String collName, String shardId, String replicaName)Description copied from interface:
DistributedCollectionLockFactoryCreate a new lock of the specified type (read or write) entering the "competition" for actually getting the lock at the given level for the given path i.e. a lock at
collNameor a lock at
collName/shardIdor a lock at
collName/shardId/replicaName, depending on the passed
The paths are used to define which locks compete with each other (locks of equal paths compete).
Upon return from this call, the lock has not been acquired but the it had entered the lock acquiring "competition", and the caller can decide to wait until the lock is granted by calling
Separating the lock creation from lock acquisition allows a more deterministic release of the locks when/if they can't be acquired.
Locks at different paths are independent of each other, multiple
DistributedLockare therefore requested for a single operation and are packaged together and returned as an
CollectionApiLockFactory.createCollectionApiLock(org.apache.solr.common.params.CollectionParams.LockLevel, java.lang.String, java.lang.String, java.lang.String).
- Specified by:
trueif requesting a write lock,
falsefor a read lock.
level- The requested locking level. Can be one of:
collName- the collection name, can never be
nullas is needed for all locks.
shardId- is ignored and can be
replicaName- is ignored and can be
- a lock instance that must be
DistributedLock.release()'ed in a
finally, regardless of the lock having been acquired or not.
protected DistributedLock doCreateLock(boolean isWriteLock, String lockPath)
protected StringBuilder getPathPrefix()