summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-08-25 09:23:42 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2015-08-25 09:23:42 +0200
commit2f86be9ced33574a76e821efa45f1ab3939b61e6 (patch)
treec242a9573653fc01613723c69cae1986d0ace187
parent424759908d044866c8d686e9f321df1d1e609fa9 (diff)
parentfe575feca85ee6e6bb7b8b423a60d377bd364193 (diff)
downloadnextcloud-server-2f86be9ced33574a76e821efa45f1ab3939b61e6.tar.gz
nextcloud-server-2f86be9ced33574a76e821efa45f1ab3939b61e6.zip
Merge pull request #18523 from owncloud/crazy-scanner
Prevent bkg scanner going crazy with unavailable storages (ajax/scan.php)
-rw-r--r--apps/files/ajax/scan.php12
-rw-r--r--apps/files/js/files.js3
-rw-r--r--lib/private/files/cache/scanner.php18
3 files changed, 25 insertions, 8 deletions
diff --git a/apps/files/ajax/scan.php b/apps/files/ajax/scan.php
index 3f430cd27ed..7d47a538fa1 100644
--- a/apps/files/ajax/scan.php
+++ b/apps/files/ajax/scan.php
@@ -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());
}
}
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 245648a79e2..4fdc9eb2110 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -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');
diff --git a/lib/private/files/cache/scanner.php b/lib/private/files/cache/scanner.php
index 7c65c721352..f76ef5ba0dd 100644
--- a/lib/private/files/cache/scanner.php
+++ b/lib/private/files/cache/scanner.php
@@ -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;
}
}