Skip unavailable storages in scanner
This commit is contained in:
parent
8fe878afe9
commit
ae71f80f4a
|
@ -47,7 +47,7 @@ $listener = new ScanListener($eventSource);
|
|||
|
||||
foreach ($users as $user) {
|
||||
$eventSource->send('user', $user);
|
||||
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection());
|
||||
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', array($listener, 'file'));
|
||||
try {
|
||||
if ($force) {
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
namespace OCA\Files\Command;
|
||||
|
||||
use OC\ForbiddenException;
|
||||
use OCP\Files\StorageNotAvailableException;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
|
@ -74,7 +75,7 @@ class Scan extends Command {
|
|||
}
|
||||
|
||||
protected function scanFiles($user, $path, $quiet, OutputInterface $output) {
|
||||
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection());
|
||||
$scanner = new \OC\Files\Utils\Scanner($user, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
if (!$quiet) {
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFile', function ($path) use ($output) {
|
||||
$output->writeln("Scanning file <info>$path</info>");
|
||||
|
@ -82,6 +83,9 @@ class Scan extends Command {
|
|||
$scanner->listen('\OC\Files\Utils\Scanner', 'scanFolder', function ($path) use ($output) {
|
||||
$output->writeln("Scanning folder <info>$path</info>");
|
||||
});
|
||||
$scanner->listen('\OC\Files\Utils\Scanner', 'StorageNotAvailable', function (StorageNotAvailableException $e) use ($output) {
|
||||
$output->writeln("Error while scanning, storage not available (" . $e->getMessage() . ")");
|
||||
});
|
||||
}
|
||||
try {
|
||||
$scanner->scan($path);
|
||||
|
|
|
@ -32,6 +32,8 @@ use OC\Files\Filesystem;
|
|||
use OC\ForbiddenException;
|
||||
use OC\Hooks\PublicEmitter;
|
||||
use OC\Lock\DBLockingProvider;
|
||||
use OCP\Files\StorageNotAvailableException;
|
||||
use OCP\ILogger;
|
||||
|
||||
/**
|
||||
* Class Scanner
|
||||
|
@ -58,11 +60,18 @@ class Scanner extends PublicEmitter {
|
|||
*/
|
||||
protected $db;
|
||||
|
||||
/**
|
||||
* @var ILogger
|
||||
*/
|
||||
protected $logger;
|
||||
|
||||
/**
|
||||
* @param string $user
|
||||
* @param \OCP\IDBConnection $db
|
||||
* @param ILogger $logger
|
||||
*/
|
||||
public function __construct($user, $db) {
|
||||
public function __construct($user, $db, ILogger $logger) {
|
||||
$this->logger = $logger;
|
||||
$this->user = $user;
|
||||
$this->propagator = new ChangePropagator(new View(''));
|
||||
$this->db = $db;
|
||||
|
@ -161,7 +170,12 @@ class Scanner extends PublicEmitter {
|
|||
if (!$isDbLocking) {
|
||||
$this->db->beginTransaction();
|
||||
}
|
||||
$scanner->scan($relativePath, \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
|
||||
try {
|
||||
$scanner->scan($relativePath, \OC\Files\Cache\Scanner::SCAN_RECURSIVE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
|
||||
} catch (StorageNotAvailableException $e) {
|
||||
$this->logger->error('Storage ' . $storage->getId() . ' not available');
|
||||
$this->emit('\OC\Files\Utils\Scanner', 'StorageNotAvailable', [$e]);
|
||||
}
|
||||
if (!$isDbLocking) {
|
||||
$this->db->commit();
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ class EtagTest extends \Test\TestCase {
|
|||
$files = array('/foo.txt', '/folder/bar.txt', '/folder/subfolder', '/folder/subfolder/qwerty.txt');
|
||||
$originalEtags = $this->getEtags($files);
|
||||
|
||||
$scanner = new \OC\Files\Utils\Scanner($user1, \OC::$server->getDatabaseConnection());
|
||||
$scanner = new \OC\Files\Utils\Scanner($user1, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
$scanner->backgroundScan('/');
|
||||
|
||||
$newEtags = $this->getEtags($files);
|
||||
|
|
|
@ -70,7 +70,7 @@ class Scanner extends \Test\TestCase {
|
|||
$storage->file_put_contents('foo.txt', 'qwerty');
|
||||
$storage->file_put_contents('folder/bar.txt', 'qwerty');
|
||||
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection());
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
$scanner->addMount($mount);
|
||||
|
||||
$scanner->scan('');
|
||||
|
@ -92,7 +92,7 @@ class Scanner extends \Test\TestCase {
|
|||
$storage->file_put_contents('foo.txt', 'qwerty');
|
||||
$storage->file_put_contents('folder/bar.txt', 'qwerty');
|
||||
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection());
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
$scanner->addMount($mount);
|
||||
|
||||
$scanner->scan('');
|
||||
|
@ -130,7 +130,7 @@ class Scanner extends \Test\TestCase {
|
|||
$storage->file_put_contents('foo.txt', 'qwerty');
|
||||
$storage->file_put_contents('folder/bar.txt', 'qwerty');
|
||||
|
||||
$scanner = new \OC\Files\Utils\Scanner($uid, \OC::$server->getDatabaseConnection());
|
||||
$scanner = new \OC\Files\Utils\Scanner($uid, \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
|
||||
$this->assertFalse($cache->inCache('folder/bar.txt'));
|
||||
$scanner->scan('/' . $uid . '/files/foo');
|
||||
|
@ -152,7 +152,7 @@ class Scanner extends \Test\TestCase {
|
|||
$storage->file_put_contents('foo.txt', 'qwerty');
|
||||
$storage->file_put_contents('folder/bar.txt', 'qwerty');
|
||||
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection());
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
$originalPropagator = $scanner->getPropagator();
|
||||
$scanner->setPropagator($propagator);
|
||||
$scanner->addMount($mount);
|
||||
|
@ -214,7 +214,7 @@ class Scanner extends \Test\TestCase {
|
|||
* @param string $invalidPath
|
||||
*/
|
||||
public function testInvalidPathScanning($invalidPath) {
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection());
|
||||
$scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger());
|
||||
$scanner->scan($invalidPath);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue