Merge pull request #5602 from owncloud/update-parent-storage-mtime
Prevent rescans of folders by updating the parent's storage_mtime
This commit is contained in:
commit
3059d7d92e
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
namespace OC\Files\Cache;
|
||||
|
||||
use OCP\Util;
|
||||
|
||||
/**
|
||||
|
@ -42,6 +43,7 @@ class Updater {
|
|||
$scanner->scan($internalPath, Scanner::SCAN_SHALLOW);
|
||||
$cache->correctFolderSize($internalPath);
|
||||
self::correctFolder($path, $storage->filemtime($internalPath));
|
||||
self::correctParentStorageMtime($storage, $internalPath);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,6 +63,7 @@ class Updater {
|
|||
$cache->remove($internalPath);
|
||||
$cache->correctFolderSize($internalPath);
|
||||
self::correctFolder($path, time());
|
||||
self::correctParentStorageMtime($storage, $internalPath);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -87,6 +90,8 @@ class Updater {
|
|||
$cache->correctFolderSize($internalTo);
|
||||
self::correctFolder($from, time());
|
||||
self::correctFolder($to, time());
|
||||
self::correctParentStorageMtime($storageFrom, $internalFrom);
|
||||
self::correctParentStorageMtime($storageTo, $internalTo);
|
||||
} else {
|
||||
self::deleteUpdate($from);
|
||||
self::writeUpdate($to);
|
||||
|
@ -151,6 +156,21 @@ class Updater {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* update the storage_mtime of the parent
|
||||
*
|
||||
* @param \OC\Files\Storage\Storage $storage
|
||||
* @param string $internalPath
|
||||
*/
|
||||
static private function correctParentStorageMtime($storage, $internalPath) {
|
||||
$cache = $storage->getCache();
|
||||
$parentId = $cache->getParentId($internalPath);
|
||||
$parent = dirname($internalPath);
|
||||
if ($parentId != -1) {
|
||||
$cache->update($parentId, array('storage_mtime' => $storage->filemtime($parent)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $params
|
||||
*/
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
namespace Test\Files\Cache;
|
||||
|
||||
use \OC\Files\Filesystem as Filesystem;
|
||||
use OC\Files\Storage\Temporary;
|
||||
|
||||
class Updater extends \PHPUnit_Framework_TestCase {
|
||||
/**
|
||||
|
@ -251,7 +252,6 @@ class Updater extends \PHPUnit_Framework_TestCase {
|
|||
|
||||
$cachedData = $this->cache->get('folder');
|
||||
$this->assertNotEquals($folderCachedData['etag'], $cachedData['etag']);
|
||||
$this->assertEquals($time, $cachedData['mtime']);
|
||||
|
||||
$cachedData = $this->cache->get('');
|
||||
$this->assertNotEquals($rootCachedData['etag'], $cachedData['etag']);
|
||||
|
@ -276,11 +276,41 @@ class Updater extends \PHPUnit_Framework_TestCase {
|
|||
|
||||
$cachedData = $cache2->get('');
|
||||
$this->assertNotEquals($substorageCachedData['etag'], $cachedData['etag']);
|
||||
$this->assertEquals($time, $cachedData['mtime']);
|
||||
|
||||
$cachedData = $this->cache->get('folder');
|
||||
$this->assertNotEquals($folderCachedData['etag'], $cachedData['etag']);
|
||||
$this->assertEquals($time, $cachedData['mtime']);
|
||||
}
|
||||
|
||||
public function testUpdatePermissionsOnRescanOnlyForUpdatedFile() {
|
||||
$permissionsCache = $this->storage->getPermissionsCache();
|
||||
$scanner = $this->storage->getScanner();
|
||||
$scanner->scan('');
|
||||
$cache = $this->storage->getCache();
|
||||
$loggedInUser = \OC_User::getUser();
|
||||
\OC_User::setUserId(self::$user);
|
||||
FileSystem::getDirectoryContent('/');
|
||||
$past = time() - 600;
|
||||
$cache->put('', array('storage_mtime' => $past));
|
||||
|
||||
$this->assertNotEquals(-1, $permissionsCache->get($cache->getId('foo.txt'), self::$user));
|
||||
$this->assertNotEquals(-1, $permissionsCache->get($cache->getId('foo.png'), self::$user));
|
||||
|
||||
$permissionsCache->set($cache->getId('foo.png'), self::$user, 15);
|
||||
FileSystem::file_put_contents('/foo.txt', 'asd');
|
||||
|
||||
$this->assertEquals(-1, $permissionsCache->get($cache->getId('foo.txt'), self::$user));
|
||||
$this->assertEquals(15, $permissionsCache->get($cache->getId('foo.png'), self::$user));
|
||||
|
||||
FileSystem::getDirectoryContent('/');
|
||||
|
||||
$this->assertEquals(15, $permissionsCache->get($cache->getId('foo.png'), self::$user));
|
||||
|
||||
FileSystem::file_put_contents('/qwerty.txt', 'asd');
|
||||
FileSystem::getDirectoryContent('/');
|
||||
|
||||
$this->assertEquals(15, $permissionsCache->get($cache->getId('foo.png'), self::$user));
|
||||
|
||||
\OC_User::setUserId($loggedInUser);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue