Zend Framework
LICENSE
This source file is subject to the new BSD license that is bundled with this package in the file LICENSE.txt. It is also available through the world-wide-web at this URL: http://framework.zend.com/license/new-bsd If you did not receive a copy of the license and are unable to obtain it through the world-wide-web, please send an email to license@zend.com so we can send you a copy immediately.
This is an utility class which provides index locks processing functionality
WRITE_LOCK_FILE = 'write.lock.file'
consts for name of file to show lock status
READ_LOCK_FILE = 'read.lock.file'
READ_LOCK_PROCESSING_LOCK_FILE = 'read-lock-processing.lock.file'
OPTIMIZATION_LOCK_FILE = 'optimization.lock.file'
_startReadLockProcessing(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
Zend_Search_Lucene_Storage_File
Obtain the exclusive "read escalation/de-escalation" lock
Required to protect the escalate/de-escalate read lock process on GFS (and potentially other) mounted filesystems.
Why we need this: While GFS supports cluster-wide locking via flock(), it's implementation isn't quite what it should be. The locking semantics that work consistently on a local filesystem tend to fail on GFS mounted filesystems. This appears to be a design defect in the implementation of GFS. How this manifests itself is that conditional promotion of a shared lock to exclusive will always fail, lock release requests are honored but not immediately processed (causing erratic failures of subsequent conditional requests) and the releasing of the exclusive lock before the shared lock is set when a lock is demoted (which can open a window of opportunity for another process to gain an exclusive lock when it shoudln't be allowed to).
_stopReadLockProcessing(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
Release the exclusive "read escalation/de-escalation" lock
Required to protect the escalate/de-escalate read lock process on GFS (and potentially other) mounted filesystems.
deEscalateReadLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
De-escalate Read lock to shared level
escalateReadLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
boolean
Escalate Read lock to exclusive level
obtainOptimizationLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
mixed
Obtain exclusive optimization lock on the index
Returns lock object on success and false otherwise (doesn't block execution)
obtainReadLock(
$lockDirectory
)
:
Zend_Search_Lucene_Storage_File
Obtain shared read lock on the index
It doesn't block other read or update processes, but prevent index from the premature cleaning-up
obtainWriteLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
Zend_Search_Lucene_Storage_File
Obtain exclusive write lock on the index
releaseOptimizationLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
Release exclusive optimization lock
releaseReadLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
Release shared read lock
releaseWriteLock(
Zend_Search_Lucene_Storage_Directory $lockDirectory
)
:
Release exclusive write lock