Cache: bookkeeping of storage_mtime
This commit is contained in:
parent
9c1196d73e
commit
3e70d563a6
|
@ -114,7 +114,7 @@ class Cache {
|
|||
$params = array($file);
|
||||
}
|
||||
$query = \OC_DB::prepare(
|
||||
'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
|
||||
'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`, `encrypted`, `etag`
|
||||
FROM `*PREFIX*filecache` ' . $where);
|
||||
$result = $query->execute($params);
|
||||
$data = $result->fetchRow();
|
||||
|
@ -133,6 +133,9 @@ class Cache {
|
|||
$data['storage'] = $this->storageId;
|
||||
$data['mimetype'] = $this->getMimetype($data['mimetype']);
|
||||
$data['mimepart'] = $this->getMimetype($data['mimepart']);
|
||||
if ($data['storage_mtime'] == 0) {
|
||||
$data['storage_mtime'] = $data['mtime'];
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
|
@ -148,13 +151,16 @@ class Cache {
|
|||
$fileId = $this->getId($folder);
|
||||
if ($fileId > -1) {
|
||||
$query = \OC_DB::prepare(
|
||||
'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`
|
||||
'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `storage_mtime`, `encrypted`, `etag`
|
||||
FROM `*PREFIX*filecache` WHERE parent = ? ORDER BY `name` ASC');
|
||||
$result = $query->execute(array($fileId));
|
||||
$files = $result->fetchAll();
|
||||
foreach ($files as &$file) {
|
||||
$file['mimetype'] = $this->getMimetype($file['mimetype']);
|
||||
$file['mimepart'] = $this->getMimetype($file['mimepart']);
|
||||
if ($file['storage_mtime'] == 0) {
|
||||
$file['storage_mtime'] = $file['mtime'];
|
||||
}
|
||||
}
|
||||
return $files;
|
||||
} else {
|
||||
|
@ -226,7 +232,7 @@ class Cache {
|
|||
* @return array
|
||||
*/
|
||||
function buildParts(array $data) {
|
||||
$fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'encrypted', 'etag');
|
||||
$fields = array('path', 'parent', 'name', 'mimetype', 'size', 'mtime', 'storage_mtime', 'encrypted', 'etag');
|
||||
$params = array();
|
||||
$queryParts = array();
|
||||
foreach ($data as $name => $value) {
|
||||
|
@ -238,6 +244,11 @@ class Cache {
|
|||
$params[] = $this->getMimetypeId(substr($value, 0, strpos($value, '/')));
|
||||
$queryParts[] = '`mimepart`';
|
||||
$value = $this->getMimetypeId($value);
|
||||
} elseif ($name === 'storage_mtime') {
|
||||
if (!isset($data['mtime'])) {
|
||||
$params[] = $value;
|
||||
$queryParts[] = '`mtime`';
|
||||
}
|
||||
}
|
||||
$params[] = $value;
|
||||
$queryParts[] = '`' . $name . '`';
|
||||
|
|
|
@ -51,6 +51,7 @@ class Scanner {
|
|||
$data['size'] = $this->storage->filesize($path);
|
||||
}
|
||||
$data['etag'] = $this->storage->getETag($path);
|
||||
$data['storage_mtime'] = $data['mtime'];
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ class Watcher {
|
|||
*/
|
||||
public function checkUpdate($path) {
|
||||
$cachedEntry = $this->cache->get($path);
|
||||
if ($this->storage->hasUpdated($path, $cachedEntry['mtime'])) {
|
||||
if ($this->storage->hasUpdated($path, $cachedEntry['storage_mtime'])) {
|
||||
if ($this->storage->is_dir($path)) {
|
||||
$this->scanner->scan($path, Scanner::SCAN_SHALLOW);
|
||||
} else {
|
||||
|
|
|
@ -204,6 +204,23 @@ class Cache extends \PHPUnit_Framework_TestCase {
|
|||
$this->assertEquals(array($storageId, 'foo'), \OC\Files\Cache\Cache::getById($id));
|
||||
}
|
||||
|
||||
function testStorageMTime() {
|
||||
$data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
|
||||
$this->cache->put('foo', $data);
|
||||
$cachedData = $this->cache->get('foo');
|
||||
$this->assertEquals($data['mtime'], $cachedData['storage_mtime']);//if no storage_mtime is saved, mtime should be used
|
||||
|
||||
$this->cache->put('foo', array('storage_mtime' => 30));//when setting storage_mtime, mtime is also set
|
||||
$cachedData = $this->cache->get('foo');
|
||||
$this->assertEquals(30, $cachedData['storage_mtime']);
|
||||
$this->assertEquals(30, $cachedData['mtime']);
|
||||
|
||||
$this->cache->put('foo', array('mtime' => 25));//setting mtime does not change storage_mtime
|
||||
$cachedData = $this->cache->get('foo');
|
||||
$this->assertEquals(30, $cachedData['storage_mtime']);
|
||||
$this->assertEquals(25, $cachedData['mtime']);
|
||||
}
|
||||
|
||||
public function tearDown() {
|
||||
$this->cache->clear();
|
||||
}
|
||||
|
@ -213,3 +230,4 @@ class Cache extends \PHPUnit_Framework_TestCase {
|
|||
$this->cache = new \OC\Files\Cache\Cache($this->storage);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ class Watcher extends \PHPUnit_Framework_TestCase {
|
|||
$updater = $storage->getWatcher();
|
||||
|
||||
//set the mtime to the past so it can detect an mtime change
|
||||
$cache->put('', array('mtime' => 10));
|
||||
$cache->put('', array('storage_mtime' => 10));
|
||||
|
||||
$this->assertTrue($cache->inCache('folder/bar.txt'));
|
||||
$this->assertTrue($cache->inCache('folder/bar2.txt'));
|
||||
|
@ -47,14 +47,14 @@ class Watcher extends \PHPUnit_Framework_TestCase {
|
|||
$cachedData = $cache->get('bar.test');
|
||||
$this->assertEquals(3, $cachedData['size']);
|
||||
|
||||
$cache->put('bar.test', array('mtime' => 10));
|
||||
$cache->put('bar.test', array('storage_mtime' => 10));
|
||||
$storage->file_put_contents('bar.test', 'test data');
|
||||
|
||||
$updater->checkUpdate('bar.test');
|
||||
$cachedData = $cache->get('bar.test');
|
||||
$this->assertEquals(9, $cachedData['size']);
|
||||
|
||||
$cache->put('folder', array('mtime' => 10));
|
||||
$cache->put('folder', array('storage_mtime' => 10));
|
||||
|
||||
$storage->unlink('folder/bar2.txt');
|
||||
$updater->checkUpdate('folder');
|
||||
|
@ -69,7 +69,7 @@ class Watcher extends \PHPUnit_Framework_TestCase {
|
|||
$updater = $storage->getWatcher();
|
||||
|
||||
//set the mtime to the past so it can detect an mtime change
|
||||
$cache->put('', array('mtime' => 10));
|
||||
$cache->put('', array('storage_mtime' => 10));
|
||||
|
||||
$storage->unlink('foo.txt');
|
||||
$storage->rename('folder', 'foo.txt');
|
||||
|
@ -86,7 +86,7 @@ class Watcher extends \PHPUnit_Framework_TestCase {
|
|||
$updater = $storage->getWatcher();
|
||||
|
||||
//set the mtime to the past so it can detect an mtime change
|
||||
$cache->put('foo.txt', array('mtime' => 10));
|
||||
$cache->put('foo.txt', array('storage_mtime' => 10));
|
||||
|
||||
$storage->unlink('foo.txt');
|
||||
$storage->rename('folder', 'foo.txt');
|
||||
|
|
|
@ -220,7 +220,7 @@ class View extends \PHPUnit_Framework_TestCase {
|
|||
$cachedData = $rootView->getFileInfo('foo.txt');
|
||||
$this->assertEquals(16, $cachedData['size']);
|
||||
|
||||
$rootView->putFileInfo('foo.txt', array('mtime' => 10));
|
||||
$rootView->putFileInfo('foo.txt', array('storage_mtime' => 10));
|
||||
$storage1->file_put_contents('foo.txt', 'foo');
|
||||
clearstatcache();
|
||||
|
||||
|
|
Loading…
Reference in New Issue