Use storage_mtime when determining if we can reuse cached data while scanning
This commit is contained in:
parent
3c0e4a3bc6
commit
203d5d01ca
|
@ -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'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -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' => 100));
|
||||||
$rootCachedData = $this->cache->get('');
|
$rootCachedData = $this->cache->get('');
|
||||||
$this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
|
$this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,12 @@ namespace Test\Files;
|
||||||
use OC\Files\Filesystem;
|
use OC\Files\Filesystem;
|
||||||
use OCP\Share;
|
use OCP\Share;
|
||||||
|
|
||||||
|
class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
|
||||||
|
public function touch($path, $mtime = null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class EtagTest extends \PHPUnit_Framework_TestCase {
|
class EtagTest extends \PHPUnit_Framework_TestCase {
|
||||||
private $datadir;
|
private $datadir;
|
||||||
|
|
||||||
|
@ -68,6 +74,23 @@ class EtagTest extends \PHPUnit_Framework_TestCase {
|
||||||
$this->assertEquals($originalEtags, $this->getEtags($files));
|
$this->assertEquals($originalEtags, $this->getEtags($files));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testTouchNotSupported() {
|
||||||
|
$storage = new TemporaryNoTouch(array());
|
||||||
|
$scanner = $storage->getScanner();
|
||||||
|
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']);
|
||||||
|
}
|
||||||
|
|
||||||
private function getEtags($files) {
|
private function getEtags($files) {
|
||||||
$etags = array();
|
$etags = array();
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
|
|
Loading…
Reference in New Issue