Beispiel #1
0
 public function testFilesystem()
 {
     $tempPath = __DIR__ . '/_tempFiles/_files';
     // remove files from temporary direcytory
     $dir = opendir($tempPath);
     while (($file = readdir($dir)) !== false) {
         if (!is_dir($tempPath . '/' . $file)) {
             @unlink($tempPath . '/' . $file);
         }
     }
     closedir($dir);
     $directory = new Directory\Filesystem($tempPath);
     $this->assertTrue($directory instanceof Directory);
     $this->assertEquals(count($directory->fileList()), 0);
     $fileObject = $directory->createFile('file1');
     $this->assertTrue($fileObject instanceof \Zend\Search\Lucene\Storage\File);
     unset($fileObject);
     $this->assertEquals($directory->fileLength('file1'), 0);
     $this->assertEquals(count(array_diff($directory->fileList(), array('file1'))), 0);
     $directory->deleteFile('file1');
     $this->assertEquals(count($directory->fileList()), 0);
     $this->assertFalse($directory->fileExists('file2'));
     $fileObject = $directory->createFile('file2');
     $this->assertEquals($directory->fileLength('file2'), 0);
     $fileObject->writeBytes('0123456789');
     unset($fileObject);
     $this->assertEquals($directory->fileLength('file2'), 10);
     $directory->renameFile('file2', 'file3');
     $this->assertEquals(count(array_diff($directory->fileList(), array('file3'))), 0);
     $modifiedAt1 = $directory->fileModified('file3');
     clearstatcache();
     $directory->touchFile('file3');
     $modifiedAt2 = $directory->fileModified('file3');
     sleep(1);
     clearstatcache();
     $directory->touchFile('file3');
     $modifiedAt3 = $directory->fileModified('file3');
     $this->assertTrue($modifiedAt2 >= $modifiedAt1);
     $this->assertTrue($modifiedAt3 > $modifiedAt2);
     $fileObject = $directory->getFileObject('file3');
     $this->assertEquals($fileObject->readBytes($directory->fileLength('file3')), '0123456789');
     unset($fileObject);
     $fileObject = $directory->createFile('file3');
     $this->assertEquals($fileObject->readBytes($directory->fileLength('file3')), '');
     unset($fileObject);
     $directory->deleteFile('file3');
     $this->assertEquals(count($directory->fileList()), 0);
     $directory->close();
 }
Beispiel #2
0
 /**
  * Detect latest delete generation
  *
  * Is actualy used from writeChanges() method or from the constructor if it's invoked from
  * Index writer. In both cases index write lock is already obtained, so we shouldn't care
  * about it
  *
  * @return integer
  */
 private function _detectLatestDelGen()
 {
     $delFileList = array();
     foreach ($this->_directory->fileList() as $file) {
         if ($file == $this->_name . '.del') {
             // Matches <segment_name>.del file name
             $delFileList[] = 0;
         } else {
             if (preg_match('/^' . $this->_name . '_([a-zA-Z0-9]+)\\.del$/i', $file, $matches)) {
                 // Matches <segment_name>_NNN.del file names
                 $delFileList[] = (int) base_convert($matches[1], 36, 10);
             }
         }
     }
     if (count($delFileList) == 0) {
         // There is no deletions file for current segment in the directory
         // Set deletions file generation number to 1
         return -1;
     } else {
         // There are some deletions files for current segment in the directory
         // Set deletions file generation number to the highest nuber
         return max($delFileList);
     }
 }