当前位置: 首页>>代码示例>>PHP>>正文


PHP Zend_Search_Lucene_LockManager::escalateReadLock方法代码示例

本文整理汇总了PHP中Zend_Search_Lucene_LockManager::escalateReadLock方法的典型用法代码示例。如果您正苦于以下问题:PHP Zend_Search_Lucene_LockManager::escalateReadLock方法的具体用法?PHP Zend_Search_Lucene_LockManager::escalateReadLock怎么用?PHP Zend_Search_Lucene_LockManager::escalateReadLock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Zend_Search_Lucene_LockManager的用法示例。


在下文中一共展示了Zend_Search_Lucene_LockManager::escalateReadLock方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: _updateSegments


//.........这里部分代码省略.........
                 $newSegmentFile->writeInt((int) 0xffffffff);
             }
             // HasSingleNormFile
             $newSegmentFile->writeByte($segmentInfo->hasSingleNormFile());
             // NumField
             $newSegmentFile->writeInt((int) 0xffffffff);
             // IsCompoundFile
             $newSegmentFile->writeByte($segmentInfo->isCompound() ? 1 : -1);
             $segments[$segmentInfo->getName()] = $segmentInfo->count();
             $this->_segmentInfos[$segName] = $segmentInfo;
         }
         $this->_newSegments = array();
         $newSegmentFile->seek($numOfSegmentsOffset);
         $newSegmentFile->writeInt($segmentsCount);
         // Update segments count
         $newSegmentFile->close();
     } catch (Exception $e) {
         /** Restore previous index generation */
         $generation--;
         $genFile->seek(4, SEEK_SET);
         // Write generation number twice
         $genFile->writeLong($generation);
         $genFile->writeLong($generation);
         // Release index write lock
         Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);
         // Throw the exception
         require_once 'Zend/Search/Lucene/Exception.php';
         throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e);
     }
     // Write generation (second copy)
     $genFile->writeLong($generation);
     // Check if another update or read process is not running now
     // If yes, skip clean-up procedure
     if (Zend_Search_Lucene_LockManager::escalateReadLock($this->_directory)) {
         /**
          * Clean-up directory
          */
         $filesToDelete = array();
         $filesTypes = array();
         $filesNumbers = array();
         // list of .del files of currently used segments
         // each segment can have several generations of .del files
         // only last should not be deleted
         $delFiles = array();
         foreach ($this->_directory->fileList() as $file) {
             if ($file == 'deletable') {
                 // 'deletable' file
                 $filesToDelete[] = $file;
                 $filesTypes[] = 0;
                 // delete this file first, since it's not used starting from Lucene v2.1
                 $filesNumbers[] = 0;
             } else {
                 if ($file == 'segments') {
                     // 'segments' file
                     $filesToDelete[] = $file;
                     $filesTypes[] = 1;
                     // second file to be deleted "zero" version of segments file (Lucene pre-2.1)
                     $filesNumbers[] = 0;
                 } else {
                     if (preg_match('/^segments_[a-zA-Z0-9]+$/i', $file)) {
                         // 'segments_xxx' file
                         // Check if it's not a just created generation file
                         if ($file != Zend_Search_Lucene::getSegmentFileName($generation)) {
                             $filesToDelete[] = $file;
                             $filesTypes[] = 2;
                             // first group of files for deletions
开发者ID:Sywooch,项目名称:forums,代码行数:67,代码来源:Writer.php

示例2: __construct

 /**
  * Opens the index.
  *
  * IndexReader constructor needs Directory as a parameter. It should be
  * a string with a path to the index folder or a Directory object.
  *
  * @param mixed $directory
  * @throws Zend_Search_Lucene_Exception
  */
 public function __construct($directory = null, $create = false)
 {
     if ($directory === null) {
         throw new Zend_Search_Exception('No index directory specified');
     }
     if ($directory instanceof Zend_Search_Lucene_Storage_Directory_Filesystem) {
         $this->_directory = $directory;
         $this->_closeDirOnExit = false;
     } else {
         $this->_directory = new Zend_Search_Lucene_Storage_Directory_Filesystem($directory);
         $this->_closeDirOnExit = true;
     }
     $this->_segmentInfos = array();
     // Mark index as "under processing" to prevent other processes from premature index cleaning
     Zend_Search_Lucene_LockManager::obtainReadLock($this->_directory);
     // Escalate read lock to prevent current generation index files to be deleted while opening process is not done
     Zend_Search_Lucene_LockManager::escalateReadLock($this->_directory);
     $this->_generation = self::getActualGeneration($this->_directory);
     if ($create) {
         try {
             Zend_Search_Lucene_LockManager::obtainWriteLock($this->_directory);
         } catch (Zend_Search_Lucene_Exception $e) {
             if (strpos($e->getMessage(), 'Can\'t obtain exclusive index lock') === false) {
                 throw $e;
             } else {
                 throw new Zend_Search_Lucene_Exception('Can\'t create index. It\'s under processing now');
             }
         }
         if ($this->_generation == -1) {
             // Directory doesn't contain existing index, start from 1
             $this->_generation = 1;
             $nameCounter = 0;
         } else {
             // Directory contains existing index
             $segmentsFile = $this->_directory->getFileObject(self::getSegmentFileName($this->_generation));
             $segmentsFile->seek(12);
             // 12 = 4 (int, file format marker) + 8 (long, index version)
             $nameCounter = $segmentsFile->readInt();
             $this->_generation++;
         }
         Zend_Search_Lucene_Index_Writer::createIndex($this->_directory, $this->_generation, $nameCounter);
         Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);
     }
     if ($this->_generation == -1) {
         throw new Zend_Search_Lucene_Exception('Index doesn\'t exists in the specified directory.');
     } else {
         if ($this->_generation == 0) {
             $this->_readPre21SegmentsFile();
         } else {
             $this->_readSegmentsFile();
         }
     }
     // De-escalate read lock to prevent current generation index files to be deleted while opening process is not done
     Zend_Search_Lucene_LockManager::deEscalateReadLock($this->_directory);
 }
开发者ID:vuchannguyen,项目名称:web,代码行数:64,代码来源:Lucene.php

示例3: _updateSegments


//.........这里部分代码省略.........
                // NumField
                $newSegmentFile->writeInt((int)0xFFFFFFFF);
                // IsCompoundFile
                $newSegmentFile->writeByte($segmentInfo->isCompound());
    
                $segments[$segmentInfo->getName()] = $segmentInfo->count();
                $this->_segmentInfos[$segName] = $segmentInfo;
            }
            $this->_newSegments = array();
    
            $newSegmentFile->seek($numOfSegmentsOffset);
            $newSegmentFile->writeInt($segmentsCount);  // Update segments count
            $newSegmentFile->close();
        } catch (Exception $e) {
            /** Restore previous index generation */
            $generation--;
            $genFile->seek(4, SEEK_SET);
            // Write generation number twice
            $genFile->writeLong($generation); $genFile->writeLong($generation);

            // Release index write lock
            Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);
            
            // Throw the exception
            throw $e;
        }

        // Write generation (second copy)
        $genFile->writeLong($generation);

        
        // Check if another update process is not running now
        // If yes, skip clean-up procedure
        if (Zend_Search_Lucene_LockManager::escalateReadLock($this->_directory)) {
            /**
             * Clean-up directory
             */
            $filesToDelete = array();
            $filesTypes    = array();
            $filesNumbers  = array();
            
            // list of .del files of currently used segments
            // each segment can have several generations of .del files
            // only last should not be deleted
            $delFiles = array();
            
            foreach ($this->_directory->fileList() as $file) {
                if ($file == 'deletable') {
                    // 'deletable' file
                    $filesToDelete[] = $file;
                    $filesTypes[]    = 0; // delete this file first, since it's not used starting from Lucene v2.1
                    $filesNumbers[]  = 0;
                } else if ($file == 'segments') {
                    // 'segments' file
    
                    $filesToDelete[] = $file;
                    $filesTypes[]    = 1; // second file to be deleted "zero" version of segments file (Lucene pre-2.1)
                    $filesNumbers[]  = 0;
                } else if (preg_match('/^segments_[a-zA-Z0-9]+$/i', $file)) {
                    // 'segments_xxx' file
                    // Check if it's not a just created generation file
                    if ($file != Zend_Search_Lucene::getSegmentFileName($generation)) {
                        $filesToDelete[] = $file;
                        $filesTypes[]    = 2; // first group of files for deletions
                        $filesNumbers[]  = (int)base_convert(substr($file, 9), 36, 10); // ordered by segment generation numbers 
                    }
开发者ID:Jtgadbois,项目名称:Pedadida,代码行数:67,代码来源:Writer.php

示例4: _updateSegments


//.........这里部分代码省略.........
                 $newSegmentFile->writeByte($isCompoundByte);
                 $segments[$segName] = $segSize;
             }
         }
         $segmentsFile->close();
         $segmentsCount = count($segments) + count($this->_newSegments);
         foreach ($this->_newSegments as $segName => $segmentInfo) {
             $newSegmentFile->writeString($segName);
             $newSegmentFile->writeInt($segmentInfo->count());
             $newSegmentFile->writeInt((int) 0xffffffff);
             $newSegmentFile->writeInt((int) 0xffffffff);
             if ($this->_targetFormatVersion == Zend_Search_Lucene::FORMAT_2_3) {
                 $newSegmentFile->writeInt((int) 0xffffffff);
             }
             $newSegmentFile->writeByte($segmentInfo->hasSingleNormFile());
             $newSegmentFile->writeInt((int) 0xffffffff);
             $newSegmentFile->writeByte($segmentInfo->isCompound() ? 1 : -1);
             $segments[$segmentInfo->getName()] = $segmentInfo->count();
             $this->_segmentInfos[$segName] = $segmentInfo;
         }
         $this->_newSegments = array();
         $newSegmentFile->seek($numOfSegmentsOffset);
         $newSegmentFile->writeInt($segmentsCount);
         $newSegmentFile->close();
     } catch (Exception $e) {
         $generation--;
         $genFile->seek(4, SEEK_SET);
         $genFile->writeLong($generation);
         $genFile->writeLong($generation);
         Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);
         throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e);
     }
     $genFile->writeLong($generation);
     if (Zend_Search_Lucene_LockManager::escalateReadLock($this->_directory)) {
         $filesToDelete = array();
         $filesTypes = array();
         $filesNumbers = array();
         $delFiles = array();
         foreach ($this->_directory->fileList() as $file) {
             if ($file == 'deletable') {
                 $filesToDelete[] = $file;
                 $filesTypes[] = 0;
                 $filesNumbers[] = 0;
             } else {
                 if ($file == 'segments') {
                     $filesToDelete[] = $file;
                     $filesTypes[] = 1;
                     $filesNumbers[] = 0;
                 } else {
                     if (preg_match('/^segments_[a-zA-Z0-9]+$/i', $file)) {
                         if ($file != Zend_Search_Lucene::getSegmentFileName($generation)) {
                             $filesToDelete[] = $file;
                             $filesTypes[] = 2;
                             $filesNumbers[] = (int) base_convert(substr($file, 9), 36, 10);
                         }
                     } else {
                         if (preg_match('/(^_([a-zA-Z0-9]+))\\.f\\d+$/i', $file, $matches)) {
                             if (!isset($segments[$matches[1]])) {
                                 $filesToDelete[] = $file;
                                 $filesTypes[] = 3;
                                 $filesNumbers[] = (int) base_convert($matches[2], 36, 10);
                             }
                         } else {
                             if (preg_match('/(^_([a-zA-Z0-9]+))(_([a-zA-Z0-9]+))\\.del$/i', $file, $matches)) {
                                 if (!isset($segments[$matches[1]])) {
                                     $filesToDelete[] = $file;
开发者ID:Blu2z,项目名称:implsk,代码行数:67,代码来源:Zend_Search_Lucene.php


注:本文中的Zend_Search_Lucene_LockManager::escalateReadLock方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。