Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions lib/private/Files/SetupManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ class SetupManager {
private array $setupUsers = [];
// List of users for which all mounts are setup
private array $setupUsersComplete = [];
// List of users for which we've already refreshed the non-authoritative mounts
private array $usersMountsUpdated = [];
/**
* An array of provider classes that have been set up, indexed by UserUID.
*
Expand Down Expand Up @@ -233,6 +235,10 @@ function ($mountPoint, IStorage $storage, IMountPoint $mount) use ($reSharingEna
* Update the cached mounts for all non-authoritative mount providers for a user.
*/
private function updateNonAuthoritativeProviders(IUser $user): void {
if (isset($this->usersMountsUpdated[$user->getUID()])) {
return;
}

// prevent recursion loop from when getting mounts from providers ends up setting up the filesystem
static $updatingProviders = false;
if ($updatingProviders) {
Expand All @@ -253,6 +259,7 @@ private function updateNonAuthoritativeProviders(IUser $user): void {
$mount = $this->mountProviderCollection->getUserMountsForProviderClasses($user, $providerNames);
$this->userMountCache->registerMounts($user, $mount, $providerNames);

$this->usersMountsUpdated[$user->getUID()] = true;
$updatingProviders = false;
}

Expand Down Expand Up @@ -674,8 +681,13 @@ public function setupForProvider(string $path, array $providers): void {
}

if ($this->fullSetupRequired($user)) {
$this->setupForUser($user);
return;
if ($this->optimizeAuthoritativeProviders) {
$this->updateNonAuthoritativeProviders($user);
$this->markUserMountsCached($user);
} else {
$this->setupForUser($user);
return;
}
}

$this->eventLogger->start('fs:setup:user:providers', 'Setup filesystem for ' . implode(', ', $providers));
Expand Down Expand Up @@ -719,6 +731,7 @@ public function tearDown() {
$this->setupUserMountProviders = [];
$this->setupMountProviderPaths = [];
$this->fullSetupRequired = [];
$this->usersMountsUpdated = [];
$this->rootSetup = false;
$this->mountManager->clear();
$this->eventDispatcher->dispatchTyped(new FilesystemTornDownEvent());
Expand Down
Loading