Class LocalLockMergingSegmentReadLocker

  • All Implemented Interfaces:
    SegmentReadLocker

    public class LocalLockMergingSegmentReadLocker
    extends Object
    implements SegmentReadLocker
    LocalLockMergingSegmentReadLocker decorates the DistributedSegmentReadLocker to minimize remote operations in case several IndexReaders are opened on the same Infinispan based Directory. It keeps track of locks which where already acquired for a specific filename from another request on the same node and merges the request so that the different clients share the same remote lock.
    Since:
    4.1
    Author:
    Sanne Grinovero
    • Constructor Detail

      • LocalLockMergingSegmentReadLocker

        public LocalLockMergingSegmentReadLocker​(Cache<?,​?> cache,
                                                 String indexName,
                                                 int affinitySegmentId)
        Create a new LocalLockMergingSegmentReadLocker for specified cache and index name.
        Parameters:
        cache -
        indexName -
      • LocalLockMergingSegmentReadLocker

        public LocalLockMergingSegmentReadLocker​(Cache<?,​?> locksCache,
                                                 Cache<?,​?> chunksCache,
                                                 Cache<?,​?> metadataCache,
                                                 String indexName,
                                                 int affinitySegmentId)
        Create a new LocalLockMergingSegmentReadLocker with special purpose caches
        Parameters:
        locksCache - the cache to be used to store distributed locks
        chunksCache - the cache containing the chunks, this is where the bulk of data is stored
        metadataCache - smaller cache for the metadata of stored elements
        indexName -
      • LocalLockMergingSegmentReadLocker

        public LocalLockMergingSegmentReadLocker​(Cache<?,​?> locksCache,
                                                 Cache<?,​?> chunksCache,
                                                 Cache<?,​?> metadataCache,
                                                 String indexName,
                                                 boolean forceSynchronousDeletes,
                                                 int affinitySegmentId)
    • Method Detail

      • acquireReadLock

        public boolean acquireReadLock​(String name)
        Acquires a readlock, in order to prevent other invocations to SegmentReadLocker.deleteOrReleaseReadLock(String) from deleting the file.
        Specified by:
        acquireReadLock in interface SegmentReadLocker
        Parameters:
        name - of the file to acquire the lock at
        Returns:
        true if the lock was acquired, false if the implementation detects the file does not exist, or that it's being deleted by some other thread.
        See Also:
        Directory.openInput(java.lang.String, org.apache.lucene.store.IOContext)
      • deleteOrReleaseReadLock

        public void deleteOrReleaseReadLock​(String name)
        It will release a previously acquired readLock, or if no readLock was acquired it will mark the file to be deleted as soon as all pending locks are releases. If it's invoked on a file without pending locks the file is deleted.
        Specified by:
        deleteOrReleaseReadLock in interface SegmentReadLocker
        Parameters:
        name - of the file to release or delete
        See Also:
        Directory.deleteFile(String)