Merge pull request #41015 from nextcloud/background-scan-catch-storage-error

continue background scanning different storages if one fails
This commit is contained in:
Robin Appelman 2024-02-07 10:06:32 +01:00 committed by GitHub
commit 5ea69768b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View 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;
}
$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);
});
$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']);
}
// don't bother scanning failed storages (shortcut for same result)
if ($storage->instanceOfStorage(FailedStorage::class)) {
continue;
}
$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);
});
$propagator = $storage->getPropagator();
$propagator->beginBatch();
$scanner->backgroundScan();
$propagator->commitBatch();
}
}