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


PHP Zend_Search_Lucene_LockManager::deEscalateReadLock方法代码示例

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


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

示例1: _updateSegments


//.........这里部分代码省略.........
                                 // second group of files for deletions
                                 $filesNumbers[] = (int) base_convert($matches[2], 36, 10);
                                 // order by segment number
                             }
                         } else {
                             if (preg_match('/(^_([a-zA-Z0-9]+))(_([a-zA-Z0-9]+))\\.del$/i', $file, $matches)) {
                                 // one of per segment files ('<segment_name>_<del_generation>.del' where <segment_name> is '_<segment_number>')
                                 // Check if it's not one of the segments in the current segments set
                                 if (!isset($segments[$matches[1]])) {
                                     $filesToDelete[] = $file;
                                     $filesTypes[] = 3;
                                     // second group of files for deletions
                                     $filesNumbers[] = (int) base_convert($matches[2], 36, 10);
                                     // order by segment number
                                 } else {
                                     $segmentNumber = (int) base_convert($matches[2], 36, 10);
                                     $delGeneration = (int) base_convert($matches[4], 36, 10);
                                     if (!isset($delFiles[$segmentNumber])) {
                                         $delFiles[$segmentNumber] = array();
                                     }
                                     $delFiles[$segmentNumber][$delGeneration] = $file;
                                 }
                             } else {
                                 if (isset(self::$_indexExtensions[substr($file, strlen($file) - 4)])) {
                                     // one of per segment files ('<segment_name>.<ext>')
                                     $segmentName = substr($file, 0, strlen($file) - 4);
                                     // Check if it's not one of the segments in the current segments set
                                     if (!isset($segments[$segmentName]) && ($this->_currentSegment === null || $this->_currentSegment->getName() != $segmentName)) {
                                         $filesToDelete[] = $file;
                                         $filesTypes[] = 3;
                                         // second group of files for deletions
                                         $filesNumbers[] = (int) base_convert(substr($file, 1, strlen($file) - 5), 36, 10);
                                         // order by segment number
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
         $maxGenNumber = 0;
         // process .del files of currently used segments
         foreach ($delFiles as $segmentNumber => $segmentDelFiles) {
             ksort($delFiles[$segmentNumber], SORT_NUMERIC);
             array_pop($delFiles[$segmentNumber]);
             // remove last delete file generation from candidates for deleting
             end($delFiles[$segmentNumber]);
             $lastGenNumber = key($delFiles[$segmentNumber]);
             if ($lastGenNumber > $maxGenNumber) {
                 $maxGenNumber = $lastGenNumber;
             }
         }
         foreach ($delFiles as $segmentNumber => $segmentDelFiles) {
             foreach ($segmentDelFiles as $delGeneration => $file) {
                 $filesToDelete[] = $file;
                 $filesTypes[] = 4;
                 // third group of files for deletions
                 $filesNumbers[] = $segmentNumber * $maxGenNumber + $delGeneration;
                 // order by <segment_number>,<del_generation> pair
             }
         }
         // Reorder files for deleting
         array_multisort($filesTypes, SORT_ASC, SORT_NUMERIC, $filesNumbers, SORT_ASC, SORT_NUMERIC, $filesToDelete, SORT_ASC, SORT_STRING);
         foreach ($filesToDelete as $file) {
             try {
                 /** Skip shared docstore segments deleting */
                 /** @todo Process '.cfx' files to check if them are already unused */
                 if (substr($file, strlen($file) - 4) != '.cfx') {
                     $this->_directory->deleteFile($file);
                 }
             } catch (Zend_Search_Lucene_Exception $e) {
                 if (strpos($e->getMessage(), 'Can\'t delete file') === false) {
                     // That's not "file is under processing or already deleted" exception
                     // Pass it through
                     throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e);
                 }
             }
         }
         // Return read lock into the previous state
         Zend_Search_Lucene_LockManager::deEscalateReadLock($this->_directory);
     } else {
         // Only release resources if another index reader is running now
         foreach ($this->_segmentsToDelete as $segName) {
             foreach (self::$_indexExtensions as $ext) {
                 $this->_directory->purgeFile($segName . $ext);
             }
         }
     }
     // Clean-up _segmentsToDelete container
     $this->_segmentsToDelete = array();
     // Release index write lock
     Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);
     // Remove unused segments from segments list
     foreach ($this->_segmentInfos as $segName => $segmentInfo) {
         if (!isset($segments[$segName])) {
             unset($this->_segmentInfos[$segName]);
         }
     }
 }
开发者ID:Sywooch,项目名称:forums,代码行数:101,代码来源: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


//.........这里部分代码省略.........
                        $filesNumbers[]  = (int)base_convert(substr($file, 9), 36, 10); // ordered by segment generation numbers 
                    }
                } else if (preg_match('/(^_([a-zA-Z0-9]+))\.f\d+$/i', $file, $matches)) {
                    // one of per segment files ('<segment_name>.f<decimal_number>')
                    // Check if it's not one of the segments in the current segments set
                    if (!isset($segments[$matches[1]])) {
                        $filesToDelete[] = $file;
                        $filesTypes[]    = 3; // second group of files for deletions
                        $filesNumbers[]  = (int)base_convert($matches[2], 36, 10); // order by segment number 
                    }
                } else if (preg_match('/(^_([a-zA-Z0-9]+))(_([a-zA-Z0-9]+))\.del$/i', $file, $matches)) {
                    // one of per segment files ('<segment_name>_<del_generation>.del' where <segment_name> is '_<segment_number>')
                    // Check if it's not one of the segments in the current segments set
                    if (!isset($segments[$matches[1]])) {
                        $filesToDelete[] = $file;
                        $filesTypes[]    = 3; // second group of files for deletions
                        $filesNumbers[]  = (int)base_convert($matches[2], 36, 10); // order by segment number 
                    } else {
                        $segmentNumber = (int)base_convert($matches[2], 36, 10);
                        $delGeneration = (int)base_convert($matches[4], 36, 10);
                        if (!isset($delFiles[$segmentNumber])) {
                            $delFiles[$segmentNumber] = array();
                        }
                        $delFiles[$segmentNumber][$delGeneration] = $file;
                    }
                } else if (isset(self::$_indexExtensions[substr($file, strlen($file)-4)])) {
                    // one of per segment files ('<segment_name>.<ext>')
                    $segmentName = substr($file, 0, strlen($file) - 4);
                    // Check if it's not one of the segments in the current segments set
                    if (!isset($segments[$segmentName])  &&
                        ($this->_currentSegment === null  ||  $this->_currentSegment->getName() != $segmentName)) {
                        $filesToDelete[] = $file;
                        $filesTypes[]    = 3; // second group of files for deletions
                        $filesNumbers[]  = (int)base_convert(substr($file, 1 /* skip '_' */, strlen($file)-5), 36, 10); // order by segment number 
                    }
                }
            }

            $maxGenNumber = 0;
            // process .del files of currently used segments
            foreach ($delFiles as $segmentNumber => $segmentDelFiles) {
                ksort($delFiles[$segmentNumber], SORT_NUMERIC);
                array_pop($delFiles[$segmentNumber]); // remove last delete file generation from candidates for deleting
                
                end($delFiles[$segmentNumber]);
                $lastGenNumber = key($delFiles[$segmentNumber]);
                if ($lastGenNumber > $maxGenNumber) {
                    $maxGenNumber = $lastGenNumber; 
                }
            }
            foreach ($delFiles as $segmentNumber => $segmentDelFiles) {
                foreach ($segmentDelFiles as $delGeneration => $file) {
                        $filesToDelete[] = $file;
                        $filesTypes[]    = 4; // third group of files for deletions
                        $filesNumbers[]  = $segmentNumber*$maxGenNumber + $delGeneration; // order by <segment_number>,<del_generation> pair 
                }
            }
            
            // Reorder files for deleting
            array_multisort($filesTypes,    SORT_ASC, SORT_NUMERIC,
                            $filesNumbers,  SORT_ASC, SORT_NUMERIC,
                            $filesToDelete, SORT_ASC, SORT_STRING);
            
            foreach ($filesToDelete as $file) {
                try {
                    $this->_directory->deleteFile($file);
                } catch (Zend_Search_Lucene_Exception $e) {
                    if (strpos($e->getMessage(), 'Can\'t delete file') === false) {
                        // That's not "file is under processing or already deleted" exception
                        // Pass it through
                        throw $e;
                    }
                }
            }
            
            // Return read lock into the previous state
            Zend_Search_Lucene_LockManager::deEscalateReadLock($this->_directory);
        } else {
            // Only release resources if another index reader is running now
            foreach ($this->_segmentsToDelete as $segName) {
                foreach (self::$_indexExtensions as $ext) {
                    $this->_directory->purgeFile($segName . $ext);
                }
            }
        }

        // Clean-up _segmentsToDelete container
        $this->_segmentsToDelete = array();
        

        // Release index write lock
        Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);

        // Remove unused segments from segments list
        foreach ($this->_segmentInfos as $segName => $segmentInfo) {
            if (!isset($segments[$segName])) {
                unset($this->_segmentInfos[$segName]);
            }
        }
    }
开发者ID:Jtgadbois,项目名称:Pedadida,代码行数:101,代码来源:Writer.php

示例4: _updateSegments


//.........这里部分代码省略.........
         $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;
                                     $filesTypes[] = 3;
                                     $filesNumbers[] = (int) base_convert($matches[2], 36, 10);
                                 } else {
                                     $segmentNumber = (int) base_convert($matches[2], 36, 10);
                                     $delGeneration = (int) base_convert($matches[4], 36, 10);
                                     if (!isset($delFiles[$segmentNumber])) {
                                         $delFiles[$segmentNumber] = array();
                                     }
                                     $delFiles[$segmentNumber][$delGeneration] = $file;
                                 }
                             } else {
                                 if (isset(self::$_indexExtensions[substr($file, strlen($file) - 4)])) {
                                     $segmentName = substr($file, 0, strlen($file) - 4);
                                     if (!isset($segments[$segmentName]) && ($this->_currentSegment === null || $this->_currentSegment->getName() != $segmentName)) {
                                         $filesToDelete[] = $file;
                                         $filesTypes[] = 3;
                                         $filesNumbers[] = (int) base_convert(substr($file, 1, strlen($file) - 5), 36, 10);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
         $maxGenNumber = 0;
         foreach ($delFiles as $segmentNumber => $segmentDelFiles) {
             ksort($delFiles[$segmentNumber], SORT_NUMERIC);
             array_pop($delFiles[$segmentNumber]);
             end($delFiles[$segmentNumber]);
             $lastGenNumber = key($delFiles[$segmentNumber]);
             if ($lastGenNumber > $maxGenNumber) {
                 $maxGenNumber = $lastGenNumber;
             }
         }
         foreach ($delFiles as $segmentNumber => $segmentDelFiles) {
             foreach ($segmentDelFiles as $delGeneration => $file) {
                 $filesToDelete[] = $file;
                 $filesTypes[] = 4;
                 $filesNumbers[] = $segmentNumber * $maxGenNumber + $delGeneration;
             }
         }
         array_multisort($filesTypes, SORT_ASC, SORT_NUMERIC, $filesNumbers, SORT_ASC, SORT_NUMERIC, $filesToDelete, SORT_ASC, SORT_STRING);
         foreach ($filesToDelete as $file) {
             try {
                 if (substr($file, strlen($file) - 4) != '.cfx') {
                     $this->_directory->deleteFile($file);
                 }
             } catch (Zend_Search_Lucene_Exception $e) {
                 if (strpos($e->getMessage(), 'Can\'t delete file') === false) {
                     throw new Zend_Search_Lucene_Exception($e->getMessage(), $e->getCode(), $e);
                 }
             }
         }
         Zend_Search_Lucene_LockManager::deEscalateReadLock($this->_directory);
     } else {
         foreach ($this->_segmentsToDelete as $segName) {
             foreach (self::$_indexExtensions as $ext) {
                 $this->_directory->purgeFile($segName . $ext);
             }
         }
     }
     $this->_segmentsToDelete = array();
     Zend_Search_Lucene_LockManager::releaseWriteLock($this->_directory);
     foreach ($this->_segmentInfos as $segName => $segmentInfo) {
         if (!isset($segments[$segName])) {
             unset($this->_segmentInfos[$segName]);
         }
     }
 }
开发者ID:Blu2z,项目名称:implsk,代码行数:101,代码来源:Zend_Search_Lucene.php


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