Merge pull request #18523 from owncloud/crazy-scanner

Prevent bkg scanner going crazy with unavailable storages (ajax/scan.php)
This commit is contained in:
Thomas Müller 2015-08-25 09:23:42 +02:00
commit 2f86be9ced
3 changed files with 25 additions and 8 deletions

View File

@ -49,10 +49,14 @@ foreach ($users as $user) {
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection());
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', array($listener, 'file'));
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', array($listener, 'folder'));
if ($force) {
$scanner->scan($dir);
} else {
$scanner->backgroundScan($dir);
try {
if ($force) {
$scanner->scan($dir);
} else {
$scanner->backgroundScan($dir);
}
} catch (\Exception $e) {
$eventSource->send('error', get_class($e) . ': ' . $e->getMessage());
}
}

View File

@ -333,6 +333,9 @@ function scanFiles(force, dir, users) {
scannerEventSource.listen('folder',function(path) {
console.log('now scanning ' + path);
});
scannerEventSource.listen('error',function(message) {
console.error('Scanner error: ', message);
});
scannerEventSource.listen('done',function(count) {
scanFiles.scanning=false;
console.log('done after ' + count + ' files');

View File

@ -416,11 +416,21 @@ class Scanner extends BasicEmitter {
public function backgroundScan() {
$lastPath = null;
while (($path = $this->cache->getIncomplete()) !== false && $path !== $lastPath) {
$this->scan($path, self::SCAN_RECURSIVE, self::REUSE_ETAG);
\OC_Hook::emit('Scanner', 'correctFolderSize', array('path' => $path));
if ($this->cacheActive) {
$this->cache->correctFolderSize($path);
try {
$this->scan($path, self::SCAN_RECURSIVE, self::REUSE_ETAG);
\OC_Hook::emit('Scanner', 'correctFolderSize', array('path' => $path));
if ($this->cacheActive) {
$this->cache->correctFolderSize($path);
}
} catch (\OCP\Files\StorageInvalidException $e) {
// skip unavailable storages
} catch (\OCP\Files\StorageNotAvailableException $e) {
// skip unavailable storages
} catch (\OCP\Lock\LockedException $e) {
// skip unavailable storages
}
// FIXME: this won't proceed with the next item, needs revamping of getIncomplete()
// to make this possible
$lastPath = $path;
}
}