Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorblizzz <blizzz@arthur-schiwon.de>2022-04-22 15:36:49 +0300
committerGitHub <noreply@github.com>2022-04-22 15:36:49 +0300
commit102d119297a4b8ee0ae5132fce77cccdea892b7e (patch)
treea84577d800e1b66d648246415533dcd120cf832e
parent9a76f06ecadf05ef1d26bd735df1bea0dfb15d59 (diff)
parentbda86016480ade925125977fbe20a7c2b05389d0 (diff)
Merge pull request #32053 from nextcloud/cache-verify-share-mountpoint
cache the verification of the share mountpoint
-rw-r--r--apps/files_sharing/lib/MountProvider.php11
-rw-r--r--apps/files_sharing/lib/SharedMount.php22
-rw-r--r--apps/files_sharing/tests/MountProviderTest.php7
3 files changed, 35 insertions, 5 deletions
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php
index 27edf5074e1..bfb40387622 100644
--- a/apps/files_sharing/lib/MountProvider.php
+++ b/apps/files_sharing/lib/MountProvider.php
@@ -34,6 +34,7 @@ use OCA\Files_Sharing\Event\ShareMountedEvent;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Config\IMountProvider;
use OCP\Files\Storage\IStorageFactory;
+use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IUser;
@@ -59,6 +60,9 @@ class MountProvider implements IMountProvider {
/** @var IEventDispatcher */
protected $eventDispatcher;
+ /** @var ICacheFactory */
+ protected $cacheFactory;
+
/**
* @param \OCP\IConfig $config
* @param IManager $shareManager
@@ -68,12 +72,14 @@ class MountProvider implements IMountProvider {
IConfig $config,
IManager $shareManager,
ILogger $logger,
- IEventDispatcher $eventDispatcher
+ IEventDispatcher $eventDispatcher,
+ ICacheFactory $cacheFactory
) {
$this->config = $config;
$this->shareManager = $shareManager;
$this->logger = $logger;
$this->eventDispatcher = $eventDispatcher;
+ $this->cacheFactory = $cacheFactory;
}
@@ -136,7 +142,8 @@ class MountProvider implements IMountProvider {
$view,
$foldersExistCache,
$this->eventDispatcher,
- $user
+ $user,
+ $this->cacheFactory->createLocal('share-valid-mountpoint')
);
$event = new ShareMountedEvent($mount);
diff --git a/apps/files_sharing/lib/SharedMount.php b/apps/files_sharing/lib/SharedMount.php
index 60361e25fd0..398da5eaf23 100644
--- a/apps/files_sharing/lib/SharedMount.php
+++ b/apps/files_sharing/lib/SharedMount.php
@@ -26,6 +26,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
+
namespace OCA\Files_Sharing;
use OC\Cache\CappedMemoryCache;
@@ -36,6 +37,7 @@ use OC\Files\View;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\Events\InvalidateMountCacheEvent;
use OCP\Files\Storage\IStorageFactory;
+use OCP\ICache;
use OCP\IUser;
use OCP\Share\Events\VerifyMountPointEvent;
@@ -63,6 +65,8 @@ class SharedMount extends MountPoint implements MoveableMount {
private IEventDispatcher $eventDispatcher;
+ private ICache $cache;
+
public function __construct(
$storage,
array $mountpoints,
@@ -71,11 +75,13 @@ class SharedMount extends MountPoint implements MoveableMount {
View $recipientView,
CappedMemoryCache $folderExistCache,
IEventDispatcher $eventDispatcher,
- IUser $user
+ IUser $user,
+ ICache $cache
) {
$this->user = $user;
$this->recipientView = $recipientView;
$this->eventDispatcher = $eventDispatcher;
+ $this->cache = $cache;
$this->superShare = $arguments['superShare'];
$this->groupedShares = $arguments['groupedShares'];
@@ -92,7 +98,17 @@ class SharedMount extends MountPoint implements MoveableMount {
* @param SharedMount[] $mountpoints
* @return string
*/
- private function verifyMountPoint(\OCP\Share\IShare $share, array $mountpoints, CappedMemoryCache $folderExistCache) {
+ private function verifyMountPoint(
+ \OCP\Share\IShare $share,
+ array $mountpoints,
+ CappedMemoryCache $folderExistCache
+ ) {
+ $cacheKey = $this->user->getUID() . '/' . $share->getTarget();
+ $cached = $this->cache->get($cacheKey);
+ if ($cached !== null) {
+ return $cached;
+ }
+
$mountPoint = basename($share->getTarget());
$parent = dirname($share->getTarget());
@@ -120,6 +136,8 @@ class SharedMount extends MountPoint implements MoveableMount {
$this->updateFileTarget($newMountPoint, $share);
}
+ $this->cache->set($cacheKey, $newMountPoint, 60 * 60);
+
return $newMountPoint;
}
diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php
index 756c6f95d42..00ae847eaac 100644
--- a/apps/files_sharing/tests/MountProviderTest.php
+++ b/apps/files_sharing/tests/MountProviderTest.php
@@ -29,10 +29,12 @@
*/
namespace OCA\Files_Sharing\Tests;
+use OC\Memcache\NullCache;
use OCA\Files_Sharing\MountProvider;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\IRootFolder;
use OCP\Files\Storage\IStorageFactory;
+use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IUser;
@@ -72,8 +74,11 @@ class MountProviderTest extends \Test\TestCase {
$this->shareManager = $this->getMockBuilder(IManager::class)->getMock();
$this->logger = $this->getMockBuilder(ILogger::class)->getMock();
$eventDispatcher = $this->createMock(IEventDispatcher::class);
+ $cacheFactory = $this->createMock(ICacheFactory::class);
+ $cacheFactory->method('createLocal')
+ ->willReturn(new NullCache());
- $this->provider = new MountProvider($this->config, $this->shareManager, $this->logger, $eventDispatcher);
+ $this->provider = new MountProvider($this->config, $this->shareManager, $this->logger, $eventDispatcher, $cacheFactory);
}
private function makeMockShare($id, $nodeId, $owner = 'user2', $target = null, $permissions = 31) {