summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <213943+nickvergessen@users.noreply.github.com>2023-03-08 08:52:54 +0100
committerGitHub <noreply@github.com>2023-03-08 08:52:54 +0100
commit11a0cb7f22a37f79b2818af9180de6cb24b02471 (patch)
tree1fac597de9c681e0f79ec9f8e27233a9cdff5dcc
parentf1abecdf47e41aeb91b8ac4a9a03992c4b1803f8 (diff)
parent6b0cef6b9ad1afe1dbabcd5b85d4ef138c1c9a21 (diff)
downloadnextcloud-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.php31
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');
}