public function writeChanges()
    {
        // Get new generation number
        $latestDelGen = $this->_detectLatestDelGen();

        if (!$this->_deletedDirty) {
            // There was no deletions by current process

            if ($latestDelGen == $this->_delGen) {
                // Delete file hasn't been updated by any concurrent process
                return;
            } else if ($latestDelGen > $this->_delGen) {
                // Delete file has been updated by some concurrent process
                // Reload deletions file
                $this->_delGen  = $latestDelGen;
                $this->_deleted = $this->_loadDelFile();

                return;
            } else {
                require_once 'Zend/Search/Lucene/Exception.php';
                throw new Zend_Search_Lucene_Exception('Delete file processing workflow is corrupted for the segment \'' . $this->_name . '\'.');
            }
        }

        if ($latestDelGen > $this->_delGen) {
            // Merge current deletions with latest deletions file
            $this->_delGen = $latestDelGen;

            $latestDelete = $this->_loadDelFile();

            if (extension_loaded('bitset')) {
                $this->_deleted = bitset_union($this->_deleted, $latestDelete);
            } else {
                $this->_deleted += $latestDelete;
            }
        }

        if (extension_loaded('bitset')) {
            $delBytes = $this->_deleted;
            $bitCount = count(bitset_to_array($delBytes));
        } else {
            $byteCount = floor($this->_docCount/8)+1;
            $delBytes = str_repeat(chr(0), $byteCount);
            for ($count = 0; $count < $byteCount; $count++) {
                $byte = 0;
                for ($bit = 0; $bit < 8; $bit++) {
                    if (isset($this->_deleted[$count*8 + $bit])) {
                        $byte |= (1<<$bit);
                    }
                }
                $delBytes[$count] = chr($byte);
            }
            $bitCount = count($this->_deleted);
        }

        if ($this->_delGen == -1) {
            // Set delete file generation number to 1
            $this->_delGen = 1;
        } else {
            // Increase delete file generation number by 1
            $this->_delGen++;
        }

        $delFile = $this->_directory->createFile($this->_name . '_' . base_convert($this->_delGen, 10, 36) . '.del');
        $delFile->writeInt($this->_docCount);
        $delFile->writeInt($bitCount);
        $delFile->writeBytes($delBytes);

        $this->_deletedDirty = false;
    }
public function writeChanges()
    {
        // Get new generation number
        $latestDelGen = $this->_detectLatestDelGen();

        if (!$this->_deletedDirty) {
            // There was no deletions by current process

            if ($latestDelGen == $this->_delGen) {
                // Delete file hasn't been updated by any concurrent process
                return;
            } else if ($latestDelGen > $this->_delGen) {
                // Delete file has been updated by some concurrent process
                // Reload deletions file
                $this->_delGen  = $latestDelGen;
                $this->_deleted = $this->_loadDelFile();

                return;
            } else {
                require_once 'Zend/Search/Lucene/Exception.php';
                throw new Zend_Search_Lucene_Exception('Delete file processing workflow is corrupted for the segment \'' . $this->_name . '\'.');
            }
        }

        if ($latestDelGen > $this->_delGen) {
            // Merge current deletions with latest deletions file
            $this->_delGen = $latestDelGen;

            $latestDelete = $this->_loadDelFile();

            if (extension_loaded('bitset')) {
                $this->_deleted = bitset_union($this->_deleted, $latestDelete);
            } else {
                $this->_deleted += $latestDelete;
            }
        }

        if (extension_loaded('bitset')) {
            $delBytes = $this->_deleted;
            $bitCount = count(bitset_to_array($delBytes));
        } else {
            $byteCount = floor($this->_docCount/8)+1;
            $delBytes = str_repeat(chr(0), $byteCount);
            for ($count = 0; $count < $byteCount; $count++) {
                $byte = 0;
                for ($bit = 0; $bit < 8; $bit++) {
                    if (isset($this->_deleted[$count*8 + $bit])) {
                        $byte |= (1<<$bit);
                    }
                }
                $delBytes[$count] = chr($byte);
            }
            $bitCount = count($this->_deleted);
        }

        if ($this->_delGen == -1) {
            // Set delete file generation number to 1
            $this->_delGen = 1;
        } else {
            // Increase delete file generation number by 1
            $this->_delGen++;
        }

        $delFile = $this->_directory->createFile($this->_name . '_' . base_convert($this->_delGen, 10, 36) . '.del');
        $delFile->writeInt($this->_docCount);
        $delFile->writeInt($bitCount);
        $delFile->writeBytes($delBytes);

        $this->_deletedDirty = false;
    }
public function writeChanges ( ) { // Get new generation number $ latestDelGen = $ this -> _detectLatestDelGen ( ) ; if ( ! $ this -> _deletedDirty ) { // There was no deletions by current process if ( $ latestDelGen == $ this -> _delGen ) { // Delete file hasn't been updated by any concurrent process return ; } else if ( $ latestDelGen > $ this -> _delGen ) { // Delete file has been updated by some concurrent process // Reload deletions file $ this -> _delGen = $ latestDelGen ; $ this -> _deleted = $ this -> _loadDelFile ( ) ; return ; } else { require_once 'Zend/Search/Lucene/Exception.php' ; throw new Zend_Search_Lucene_Exception ( 'Delete file processing workflow is corrupted for the segment \'' . $ this -> _name . '\'.' ) ; } } if ( $ latestDelGen > $ this -> _delGen ) { // Merge current deletions with latest deletions file $ this -> _delGen = $ latestDelGen ; $ latestDelete = $ this -> _loadDelFile ( ) ; if ( extension_loaded ( 'bitset' ) ) { $ this -> _deleted = bitset_union ( $ this -> _deleted , $ latestDelete ) ; } else { $ this -> _deleted += $ latestDelete ; } } if ( extension_loaded ( 'bitset' ) ) { $ delBytes = $ this -> _deleted ; $ bitCount = count ( bitset_to_array ( $ delBytes ) ) ; } else { $ byteCount = floor ( $ this -> _docCount / 8 ) + 1 ; $ delBytes = str_repeat ( chr ( 0 ) , $ byteCount ) ; for ( $ count = 0 ; $ count < $ byteCount ; $ count ++ ) { $ byte = 0 ; for ( $ bit = 0 ; $ bit < 8 ; $ bit ++ ) { if ( isset ( $ this -> _deleted [ $ count * 8 + $ bit ] ) ) { $ byte |= ( 1 << $ bit ) ; } } $ delBytes [ $ count ] = chr ( $ byte ) ; } $ bitCount = count ( $ this -> _deleted ) ; } if ( $ this -> _delGen == - 1 ) { // Set delete file generation number to 1 $ this -> _delGen = 1 ; } else { // Increase delete file generation number by 1 $ this -> _delGen ++ ; } $ delFile = $ this -> _directory -> createFile ( $ this -> _name . '_' . base_convert ( $ this -> _delGen , 10 , 36 ) . '.del' ) ; $ delFile -> writeInt ( $ this -> _docCount ) ; $ delFile -> writeInt ( $ bitCount ) ; $ delFile -> writeBytes ( $ delBytes ) ; $ this -> _deletedDirty = false ; }
Write changes if it's necessary.

This method must be invoked only from the Writer _updateSegments() method,
so index Write lock has to be already obtained.

@internal
@throws Zend_Search_Lucene_Exceptions
Write changes if it s necessary .