diff options
author | Joas Schilling <213943+nickvergessen@users.noreply.github.com> | 2023-03-08 08:52:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-08 08:52:54 +0100 |
commit | 11a0cb7f22a37f79b2818af9180de6cb24b02471 (patch) | |
tree | 1fac597de9c681e0f79ec9f8e27233a9cdff5dcc | |
parent | f1abecdf47e41aeb91b8ac4a9a03992c4b1803f8 (diff) | |
parent | 6b0cef6b9ad1afe1dbabcd5b85d4ef138c1c9a21 (diff) | |
download | nextcloud-server-11a0cb7f22a37f79b2818af9180de6cb24b02471.tar.gz nextcloud-server-11a0cb7f22a37f79b2818af9180de6cb24b02471.zip |
Merge pull request #32038 from nextcloud/bugfix/noid/only-update-indexes-after-changing-all-mounts
Add transaction around mass mounts operations
-rw-r--r-- | lib/private/Files/Config/UserMountCache.php | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php index fe677c5ea52..a60b39823c5 100644 --- a/lib/private/Files/Config/UserMountCache.php +++ b/lib/private/Files/Config/UserMountCache.php @@ -130,18 +130,25 @@ class UserMountCache implements IUserMountCache { $changedMounts = $this->findChangedMounts($newMounts, $cachedMounts); - foreach ($addedMounts as $mount) { - $this->addToCache($mount); - /** @psalm-suppress InvalidArgument */ - $this->mountsForUsers[$user->getUID()][] = $mount; - } - foreach ($removedMounts as $mount) { - $this->removeFromCache($mount); - $index = array_search($mount, $this->mountsForUsers[$user->getUID()]); - unset($this->mountsForUsers[$user->getUID()][$index]); - } - foreach ($changedMounts as $mount) { - $this->updateCachedMount($mount); + $this->connection->beginTransaction(); + try { + foreach ($addedMounts as $mount) { + $this->addToCache($mount); + /** @psalm-suppress InvalidArgument */ + $this->mountsForUsers[$user->getUID()][] = $mount; + } + foreach ($removedMounts as $mount) { + $this->removeFromCache($mount); + $index = array_search($mount, $this->mountsForUsers[$user->getUID()]); + unset($this->mountsForUsers[$user->getUID()][$index]); + } + foreach ($changedMounts as $mount) { + $this->updateCachedMount($mount); + } + $this->connection->commit(); + } catch (\Throwable $e) { + $this->connection->rollBack(); + throw $e; } $this->eventLogger->end('fs:setup:user:register'); } |