]> source.dussan.org Git - nextcloud-server.git/commitdiff
continue background scanning different storages if one fails 43420/head
authorRobin Appelman <robin@icewind.nl>
Fri, 20 Oct 2023 14:31:48 +0000 (16:31 +0200)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Wed, 7 Feb 2024 09:07:40 +0000 (09:07 +0000)
Signed-off-by: Robin Appelman <robin@icewind.nl>
lib/private/Files/Utils/Scanner.php

index 277ce38175f57b4c90728d4872f995c760e503d7..4d4c8a63d9e531ad94258c736abf6d384b6ba5bd 100644 (file)
@@ -156,33 +156,37 @@ class Scanner extends PublicEmitter {
        public function backgroundScan($dir) {
                $mounts = $this->getMounts($dir);
                foreach ($mounts as $mount) {
-                       $storage = $mount->getStorage();
-                       if (is_null($storage)) {
-                               continue;
-                       }
+                       try {
+                               $storage = $mount->getStorage();
+                               if (is_null($storage)) {
+                                       continue;
+                               }
 
-                       // don't bother scanning failed storages (shortcut for same result)
-                       if ($storage->instanceOfStorage(FailedStorage::class)) {
-                               continue;
-                       }
+                               // don't bother scanning failed storages (shortcut for same result)
+                               if ($storage->instanceOfStorage(FailedStorage::class)) {
+                                       continue;
+                               }
 
-                       $scanner = $storage->getScanner();
-                       $this->attachListener($mount);
+                               $scanner = $storage->getScanner();
+                               $this->attachListener($mount);
 
-                       $scanner->listen('\OC\Files\Cache\Scanner', 'removeFromCache', function ($path) use ($storage) {
-                               $this->triggerPropagator($storage, $path);
-                       });
-                       $scanner->listen('\OC\Files\Cache\Scanner', 'updateCache', function ($path) use ($storage) {
-                               $this->triggerPropagator($storage, $path);
-                       });
-                       $scanner->listen('\OC\Files\Cache\Scanner', 'addToCache', function ($path) use ($storage) {
-                               $this->triggerPropagator($storage, $path);
-                       });
+                               $scanner->listen('\OC\Files\Cache\Scanner', 'removeFromCache', function ($path) use ($storage) {
+                                       $this->triggerPropagator($storage, $path);
+                               });
+                               $scanner->listen('\OC\Files\Cache\Scanner', 'updateCache', function ($path) use ($storage) {
+                                       $this->triggerPropagator($storage, $path);
+                               });
+                               $scanner->listen('\OC\Files\Cache\Scanner', 'addToCache', function ($path) use ($storage) {
+                                       $this->triggerPropagator($storage, $path);
+                               });
 
-                       $propagator = $storage->getPropagator();
-                       $propagator->beginBatch();
-                       $scanner->backgroundScan();
-                       $propagator->commitBatch();
+                               $propagator = $storage->getPropagator();
+                               $propagator->beginBatch();
+                               $scanner->backgroundScan();
+                               $propagator->commitBatch();
+                       } catch (\Exception $e) {
+                               $this->logger->error("Error while trying to scan mount as {$mount->getMountPoint()}:" . $e->getMessage(), ['exception' => $e, 'app' => 'files']);
+                       }
                }
        }