Merge pull request #6768 from owncloud/scanner-use-storage-mtime

Use storage_mtime when determining if we can reuse cached data while scanning
This commit is contained in:
Vincent Petry 2014-01-15 01:31:33 -08:00
commit 34559ef114
4 changed files with 20 additions and 3 deletions

View File

@ -122,7 +122,7 @@ class Scanner extends BasicEmitter {
$propagateETagChange = true; $propagateETagChange = true;
} }
// only reuse data if the file hasn't explicitly changed // only reuse data if the file hasn't explicitly changed
if (isset($data['mtime']) && isset($cacheData['mtime']) && $data['mtime'] === $cacheData['mtime']) { if (isset($data['storage_mtime']) && isset($cacheData['storage_mtime']) && $data['storage_mtime'] === $cacheData['storage_mtime']) {
if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) { if (($reuseExisting & self::REUSE_SIZE) && ($data['size'] === -1)) {
$data['size'] = $cacheData['size']; $data['size'] = $cacheData['size'];
} }

View File

@ -147,7 +147,7 @@ class Scanner extends \PHPUnit_Framework_TestCase {
$this->scanner->scan(''); $this->scanner->scan('');
$oldData = $this->cache->get(''); $oldData = $this->cache->get('');
$this->storage->unlink('folder/bar.txt'); $this->storage->unlink('folder/bar.txt');
$this->cache->put('folder', array('mtime' => $this->storage->filemtime('folder'))); $this->cache->put('folder', array('mtime' => $this->storage->filemtime('folder'), 'storage_mtime' => $this->storage->filemtime('folder')));
$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_SIZE); $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_SIZE);
$newData = $this->cache->get(''); $newData = $this->cache->get('');
$this->assertNotEquals($oldData['etag'], $newData['etag']); $this->assertNotEquals($oldData['etag'], $newData['etag']);

View File

@ -88,7 +88,7 @@ class Updater extends \PHPUnit_Framework_TestCase {
public function testWrite() { public function testWrite() {
$textSize = strlen("dummy file data\n"); $textSize = strlen("dummy file data\n");
$imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png'); $imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
$this->cache->put('foo.txt', array('mtime' => 100)); $this->cache->put('foo.txt', array('mtime' => 100, 'storage_mtime' => 150));
$rootCachedData = $this->cache->get(''); $rootCachedData = $this->cache->get('');
$this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']); $this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);

View File

@ -545,4 +545,21 @@ class View extends \PHPUnit_Framework_TestCase {
$this->assertContains($item['name'], $names); $this->assertContains($item['name'], $names);
} }
} }
public function testTouchNotSupported() {
$storage = new TemporaryNoTouch(array());
$scanner = $storage->getScanner();
\OC\Files\Filesystem::mount($storage, array(), '/test/');
$past = time() - 100;
$storage->file_put_contents('test', 'foobar');
$scanner->scan('');
$view = new \OC\Files\View('');
$info = $view->getFileInfo('/test/test');
$view->touch('/test/test', $past);
$scanner->scanFile('test', \OC\Files\Cache\Scanner::REUSE_ETAG);
$info2 = $view->getFileInfo('/test/test');
$this->assertEquals($info['etag'], $info2['etag']);
}
} }