From 10767d77799e2b530ac3220b2cf79719dcf8cce9 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 15 Aug 2022 11:53:54 +0200 Subject: [PATCH 1/2] fix updating cached mounts that didn't have their mount provider set previously Signed-off-by: Robin Appelman --- lib/private/Files/Config/UserMountCache.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php index 685057a78600f..3540b56374219 100644 --- a/lib/private/Files/Config/UserMountCache.php +++ b/lib/private/Files/Config/UserMountCache.php @@ -90,7 +90,12 @@ public function registerMounts(IUser $user, array $mounts, array $mountProviderC $cachedMounts = $this->getMountsForUser($user); if (is_array($mountProviderClasses)) { - $cachedMounts = array_filter($cachedMounts, function (ICachedMountInfo $mountInfo) use ($mountProviderClasses) { + $cachedMounts = array_filter($cachedMounts, function (ICachedMountInfo $mountInfo) use ($mountProviderClasses, $newMounts) { + // for existing mounts that didn't have a mount provider set + // we still want the ones that map to new mounts + if ($mountInfo->getMountProvider() === '' && isset($newMounts[$mountInfo->getRootId()])) { + return true; + } return in_array($mountInfo->getMountProvider(), $mountProviderClasses); }); } From 887952b4f4761415b048ed7b453442b0ea234a21 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 15 Aug 2022 12:45:41 +0200 Subject: [PATCH 2/2] add tests for cached mount provider migration Signed-off-by: Robin Appelman --- tests/lib/Files/Config/UserMountCacheTest.php | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/lib/Files/Config/UserMountCacheTest.php b/tests/lib/Files/Config/UserMountCacheTest.php index 8b26b309daa0d..f1206781c5ed4 100644 --- a/tests/lib/Files/Config/UserMountCacheTest.php +++ b/tests/lib/Files/Config/UserMountCacheTest.php @@ -507,4 +507,29 @@ public function testGetUsedSpaceForUsers() { $result = $this->cache->getUsedSpaceForUsers([$user1, $user2]); $this->assertEquals(['u1' => 100], $result); } + + + public function testMigrateMountProvider() { + $user1 = $this->userManager->get('u1'); + + [$storage1, $rootId] = $this->getStorage(2); + $rootId = $this->createCacheEntry('', 2); + $mount1 = new MountPoint($storage1, '/foo/'); + $this->cache->registerMounts($user1, [$mount1]); + + $this->clearCache(); + + $cachedMounts = $this->cache->getMountsForUser($user1); + $this->assertCount(1, $cachedMounts); + $this->assertEquals('', $cachedMounts[0]->getMountProvider()); + + $mount1 = new MountPoint($storage1, '/foo/', null, null, null, null, 'dummy'); + $this->cache->registerMounts($user1, [$mount1], ['dummy']); + + $this->clearCache(); + + $cachedMounts = $this->cache->getMountsForUser($user1); + $this->assertCount(1, $cachedMounts); + $this->assertEquals('dummy', $cachedMounts[0]->getMountProvider()); + } }