diff options
author | Vincent Petry <pvince81@owncloud.com> | 2016-11-10 15:44:18 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2017-01-10 16:11:45 +0100 |
commit | 706655ef2000f00c66aa1c4387ab9fa7f60cc537 (patch) | |
tree | 2be8227b3523d1b4db09ccfbb47ffd0792980b03 | |
parent | b727edf17e18e9e0aa9060e6a936078a8d5a8d13 (diff) | |
download | nextcloud-server-706655ef2000f00c66aa1c4387ab9fa7f60cc537.tar.gz nextcloud-server-706655ef2000f00c66aa1c4387ab9fa7f60cc537.zip |
Skip local shares in bkg scan and occ files:scan (#26590)
Local shares should only be scanned when doing it for the owner to
avoid repeatedly rescanning the same shared storage over and over again
for every recipient.
-rw-r--r-- | lib/private/Files/Utils/Scanner.php | 20 | ||||
-rw-r--r-- | tests/lib/Files/Utils/ScannerTest.php | 20 |
2 files changed, 35 insertions, 5 deletions
diff --git a/lib/private/Files/Utils/Scanner.php b/lib/private/Files/Utils/Scanner.php index d26c601be1a..3794e316dfe 100644 --- a/lib/private/Files/Utils/Scanner.php +++ b/lib/private/Files/Utils/Scanner.php @@ -118,14 +118,19 @@ class Scanner extends PublicEmitter { public function backgroundScan($dir) { $mounts = $this->getMounts($dir); foreach ($mounts as $mount) { - if (is_null($mount->getStorage())) { + $storage = $mount->getStorage(); + if (is_null($storage)) { continue; } // don't scan the root storage - if ($mount->getStorage()->instanceOfStorage('\OC\Files\Storage\Local') && $mount->getMountPoint() === '/') { + if ($storage->instanceOfStorage('\OC\Files\Storage\Local') && $mount->getMountPoint() === '/') { + continue; + } + + // don't scan received local shares, these can be scanned when scanning the owner's storage + if ($storage->instanceOfStorage('OCA\Files_Sharing\ISharedStorage')) { continue; } - $storage = $mount->getStorage(); $scanner = $storage->getScanner(); $this->attachListener($mount); @@ -156,10 +161,10 @@ class Scanner extends PublicEmitter { } $mounts = $this->getMounts($dir); foreach ($mounts as $mount) { - if (is_null($mount->getStorage())) { + $storage = $mount->getStorage(); + if (is_null($storage)) { continue; } - $storage = $mount->getStorage(); // if the home storage isn't writable then the scanner is run as the wrong user if ($storage->instanceOfStorage('\OC\Files\Storage\Home') and (!$storage->isCreatable('') or !$storage->isCreatable('files')) @@ -171,6 +176,11 @@ class Scanner extends PublicEmitter { } } + + // don't scan received local shares, these can be scanned when scanning the owner's storage + if ($storage->instanceOfStorage('OCA\Files_Sharing\ISharedStorage')) { + continue; + } $relativePath = $mount->getInternalPath($dir); $scanner = $storage->getScanner(); $scanner->setUseTransactions(false); diff --git a/tests/lib/Files/Utils/ScannerTest.php b/tests/lib/Files/Utils/ScannerTest.php index 7895331d615..6d6007551ce 100644 --- a/tests/lib/Files/Utils/ScannerTest.php +++ b/tests/lib/Files/Utils/ScannerTest.php @@ -188,4 +188,24 @@ class ScannerTest extends \Test\TestCase { $this->assertNotEquals($oldRoot->getEtag(), $newRoot->getEtag()); } + + public function testSkipLocalShares() { + $sharedStorage = $this->createMock('OCA\Files_Sharing\SharedStorage'); + $sharedMount = new MountPoint($sharedStorage, '/share'); + Filesystem::getMountManager()->addMount($sharedMount); + + $sharedStorage->expects($this->any()) + ->method('instanceOfStorage') + ->will($this->returnValueMap([ + ['OCA\Files_Sharing\ISharedStorage', true], + ])); + $sharedStorage->expects($this->never()) + ->method('getScanner'); + + $scanner = new TestScanner('', \OC::$server->getDatabaseConnection(), \OC::$server->getLogger()); + $scanner->addMount($sharedMount); + $scanner->scan(''); + + $scanner->backgroundScan(''); + } } |