]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: improve moving object store items to trashbin backport/48205/stable28 48213/head
authorRobin Appelman <robin@icewind.nl>
Thu, 19 Sep 2024 17:33:34 +0000 (19:33 +0200)
committerLouis <louis@chmn.me>
Tue, 8 Oct 2024 16:14:26 +0000 (18:14 +0200)
Signed-off-by: Robin Appelman <robin@icewind.nl>
apps/files_trashbin/lib/Trashbin.php

index 442b0b591c1242fdb6759218e523ddbeff633e2b..d19ef5cc02bc58cf6862abc01610d7b1ab38f8f3 100644 (file)
@@ -53,7 +53,6 @@ use OC\Files\Node\File;
 use OC\Files\Node\Folder;
 use OC\Files\Node\NonExistingFile;
 use OC\Files\Node\NonExistingFolder;
-use OC\Files\ObjectStore\ObjectStoreStorage;
 use OC\Files\View;
 use OC_User;
 use OCA\Files_Trashbin\AppInfo\Application;
@@ -67,6 +66,8 @@ use OCP\Files\IRootFolder;
 use OCP\Files\Node;
 use OCP\Files\NotFoundException;
 use OCP\Files\NotPermittedException;
+use OCP\Files\Storage\ILockingStorage;
+use OCP\Files\Storage\IStorage;
 use OCP\FilesMetadata\IFilesMetadataManager;
 use OCP\IConfig;
 use OCP\Lock\ILockingProvider;
@@ -290,11 +291,10 @@ class Trashbin {
                $trashPath = '/files_trashbin/files/' . static::getTrashFilename($filename, $timestamp);
                $gotLock = false;
 
-               while (!$gotLock) {
+               do {
+                       /** @var ILockingStorage & IStorage $trashStorage */
+                       [$trashStorage, $trashInternalPath] = $ownerView->resolvePath($trashPath);
                        try {
-                               /** @var \OC\Files\Storage\Storage $trashStorage */
-                               [$trashStorage, $trashInternalPath] = $ownerView->resolvePath($trashPath);
-
                                $trashStorage->acquireLock($trashInternalPath, ILockingProvider::LOCK_EXCLUSIVE, $lockingProvider);
                                $gotLock = true;
                        } catch (LockedException $e) {
@@ -305,7 +305,7 @@ class Trashbin {
 
                                $trashPath = '/files_trashbin/files/' . static::getTrashFilename($filename, $timestamp);
                        }
-               }
+               } while (!$gotLock);
 
                $sourceStorage = $sourceInfo->getStorage();
                $sourceInternalPath = $sourceInfo->getInternalPath();
@@ -319,13 +319,12 @@ class Trashbin {
                        return false;
                }
 
-
                try {
                        $moveSuccessful = true;
 
-                       // when moving within the same object store, the cache update done below is enough to move the file
-                       if (!($trashStorage->instanceOfStorage(ObjectStoreStorage::class) && $trashStorage->getId() === $sourceStorage->getId())) {
-                               $trashStorage->moveFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
+                       $trashStorage->moveFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
+                       if ($sourceStorage->getCache()->inCache($sourceInternalPath)) {
+                               $trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);
                        }
                        if ($trashStorage->getCache()->inCache($sourceInternalPath)) {
                                $trashStorage->getUpdater()->renameFromStorage($sourceStorage, $sourceInternalPath, $trashInternalPath);