original_string: private function _maybeMergeSegments()
      {
          if (Zend_Search_Lucene_LockManager::obtainOptimizationLock($this->_directory) === false) {
              return;
          }
  
          if (!$this->_hasAnythingToMerge()) {
              Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory);
              return;
          }
  
          // Update segments list to be sure all segments are not merged yet by another process
          //
          // Segment merging functionality is concentrated in this class and surrounded
          // by optimization lock obtaining/releasing.
          // _updateSegments() refreshes segments list from the latest index generation.
          // So only new segments can be added to the index while we are merging some already existing
          // segments.
          // Newly added segments will be also included into the index by the _updateSegments() call
          // either by another process or by the current process with the commit() call at the end of _mergeSegments() method.
          // That's guaranteed by the serialisation of _updateSegments() execution using exclusive locks.
          $this->_updateSegments();
  
          // Perform standard auto-optimization procedure
          $segmentSizes = array();
          foreach ($this->_segmentInfos as $segName => $segmentInfo) {
              $segmentSizes[$segName] = $segmentInfo->count();
          }
  
          $mergePool   = array();
          $poolSize    = 0;
          $sizeToMerge = $this->maxBufferedDocs;
          asort($segmentSizes, SORT_NUMERIC);
          foreach ($segmentSizes as $segName => $size) {
              // Check, if segment comes into a new merging block
              while ($size >= $sizeToMerge) {
                  // Merge previous block if it's large enough
                  if ($poolSize >= $sizeToMerge) {
                      $this->_mergeSegments($mergePool);
                  }
                  $mergePool   = array();
                  $poolSize    = 0;
  
                  $sizeToMerge *= $this->mergeFactor;
  
                  if ($sizeToMerge > $this->maxMergeDocs) {
                      Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory);
                      return;
                  }
              }
  
              $mergePool[] = $this->_segmentInfos[$segName];
              $poolSize += $size;
          }
  
          if ($poolSize >= $sizeToMerge) {
              $this->_mergeSegments($mergePool);
          }
  
          Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory);
      }
code: private function _maybeMergeSegments()
      {
          if (Zend_Search_Lucene_LockManager::obtainOptimizationLock($this->_directory) === false) {
              return;
          }
  
          if (!$this->_hasAnythingToMerge()) {
              Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory);
              return;
          }
  
          // Update segments list to be sure all segments are not merged yet by another process
          //
          // Segment merging functionality is concentrated in this class and surrounded
          // by optimization lock obtaining/releasing.
          // _updateSegments() refreshes segments list from the latest index generation.
          // So only new segments can be added to the index while we are merging some already existing
          // segments.
          // Newly added segments will be also included into the index by the _updateSegments() call
          // either by another process or by the current process with the commit() call at the end of _mergeSegments() method.
          // That's guaranteed by the serialisation of _updateSegments() execution using exclusive locks.
          $this->_updateSegments();
  
          // Perform standard auto-optimization procedure
          $segmentSizes = array();
          foreach ($this->_segmentInfos as $segName => $segmentInfo) {
              $segmentSizes[$segName] = $segmentInfo->count();
          }
  
          $mergePool   = array();
          $poolSize    = 0;
          $sizeToMerge = $this->maxBufferedDocs;
          asort($segmentSizes, SORT_NUMERIC);
          foreach ($segmentSizes as $segName => $size) {
              // Check, if segment comes into a new merging block
              while ($size >= $sizeToMerge) {
                  // Merge previous block if it's large enough
                  if ($poolSize >= $sizeToMerge) {
                      $this->_mergeSegments($mergePool);
                  }
                  $mergePool   = array();
                  $poolSize    = 0;
  
                  $sizeToMerge *= $this->mergeFactor;
  
                  if ($sizeToMerge > $this->maxMergeDocs) {
                      Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory);
                      return;
                  }
              }
  
              $mergePool[] = $this->_segmentInfos[$segName];
              $poolSize += $size;
          }
  
          if ($poolSize >= $sizeToMerge) {
              $this->_mergeSegments($mergePool);
          }
  
          Zend_Search_Lucene_LockManager::releaseOptimizationLock($this->_directory);
      }
code_tokens: private function _maybeMergeSegments ( ) { if ( Zend_Search_Lucene_LockManager :: obtainOptimizationLock ( $ this -> _directory ) === false ) { return ; } if ( ! $ this -> _hasAnythingToMerge ( ) ) { Zend_Search_Lucene_LockManager :: releaseOptimizationLock ( $ this -> _directory ) ; return ; } // Update segments list to be sure all segments are not merged yet by another process // // Segment merging functionality is concentrated in this class and surrounded // by optimization lock obtaining/releasing. // _updateSegments() refreshes segments list from the latest index generation. // So only new segments can be added to the index while we are merging some already existing // segments. // Newly added segments will be also included into the index by the _updateSegments() call // either by another process or by the current process with the commit() call at the end of _mergeSegments() method. // That's guaranteed by the serialisation of _updateSegments() execution using exclusive locks. $ this -> _updateSegments ( ) ; // Perform standard auto-optimization procedure $ segmentSizes = array ( ) ; foreach ( $ this -> _segmentInfos as $ segName => $ segmentInfo ) { $ segmentSizes [ $ segName ] = $ segmentInfo -> count ( ) ; } $ mergePool = array ( ) ; $ poolSize = 0 ; $ sizeToMerge = $ this -> maxBufferedDocs ; asort ( $ segmentSizes , SORT_NUMERIC ) ; foreach ( $ segmentSizes as $ segName => $ size ) { // Check, if segment comes into a new merging block while ( $ size >= $ sizeToMerge ) { // Merge previous block if it's large enough if ( $ poolSize >= $ sizeToMerge ) { $ this -> _mergeSegments ( $ mergePool ) ; } $ mergePool = array ( ) ; $ poolSize = 0 ; $ sizeToMerge *= $ this -> mergeFactor ; if ( $ sizeToMerge > $ this -> maxMergeDocs ) { Zend_Search_Lucene_LockManager :: releaseOptimizationLock ( $ this -> _directory ) ; return ; } } $ mergePool [ ] = $ this -> _segmentInfos [ $ segName ] ; $ poolSize += $ size ; } if ( $ poolSize >= $ sizeToMerge ) { $ this -> _mergeSegments ( $ mergePool ) ; } Zend_Search_Lucene_LockManager :: releaseOptimizationLock ( $ this -> _directory ) ; }
docstring: Merge segments if necessary
docstring_tokens: Merge segments if necessary