]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Add logging statement for cases when updating the version fails
authorJulius Härtl <jus@bitgrid.net>
Wed, 21 Jun 2023 08:35:12 +0000 (10:35 +0200)
committerJulius Härtl <jus@bitgrid.net>
Wed, 21 Jun 2023 08:35:12 +0000 (10:35 +0200)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/files_versions/lib/Listener/FileEventsListener.php

index 69fb0f1fa54fede42b8725bc1b842c54e46f0907..1777342feab09855ccbc8222e5f9bc8491c46f51 100644 (file)
@@ -40,6 +40,7 @@ use OCA\Files_Versions\Db\VersionEntity;
 use OCA\Files_Versions\Db\VersionsMapper;
 use OCA\Files_Versions\Storage;
 use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\DB\Exception;
 use OCP\EventDispatcher\Event;
 use OCP\EventDispatcher\IEventListener;
 use OCP\Files\Events\Node\BeforeNodeCopiedEvent;
@@ -57,6 +58,7 @@ use OCP\Files\Folder;
 use OCP\Files\IMimeTypeLoader;
 use OCP\Files\IRootFolder;
 use OCP\Files\Node;
+use Psr\Log\LoggerInterface;
 
 class FileEventsListener implements IEventListener {
        private IRootFolder $rootFolder;
@@ -74,15 +76,18 @@ class FileEventsListener implements IEventListener {
         */
        private array $versionsDeleted = [];
        private IMimeTypeLoader $mimeTypeLoader;
+       private LoggerInterface $logger;
 
        public function __construct(
                IRootFolder $rootFolder,
                VersionsMapper $versionsMapper,
-               IMimeTypeLoader $mimeTypeLoader
+               IMimeTypeLoader $mimeTypeLoader,
+               LoggerInterface $logger,
        ) {
                $this->rootFolder = $rootFolder;
                $this->versionsMapper = $versionsMapper;
                $this->mimeTypeLoader = $mimeTypeLoader;
+               $this->logger = $logger;
        }
 
        public function handle(Event $event): void {
@@ -234,13 +239,29 @@ class FileEventsListener implements IEventListener {
                        // Unless both versions have the same mtime.
                        $this->created($node);
                } else {
-                       // If no new version was stored in the FS, no new version should be added in the DB.
-                       // So we simply update the associated version.
-                       $currentVersionEntity = $this->versionsMapper->findVersionForFileId($node->getId(), $writeHookInfo['previousNode']->getMtime());
-                       $currentVersionEntity->setTimestamp($node->getMTime());
-                       $currentVersionEntity->setSize($node->getSize());
-                       $currentVersionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype()));
-                       $this->versionsMapper->update($currentVersionEntity);
+                       try {
+                               // If no new version was stored in the FS, no new version should be added in the DB.
+                               // So we simply update the associated version.
+                               $currentVersionEntity = $this->versionsMapper->findVersionForFileId($node->getId(), $writeHookInfo['previousNode']->getMtime());
+                               $currentVersionEntity->setTimestamp($node->getMTime());
+                               $currentVersionEntity->setSize($node->getSize());
+                               $currentVersionEntity->setMimetype($this->mimeTypeLoader->getId($node->getMimetype()));
+                               $this->versionsMapper->update($currentVersionEntity);
+                       } catch (Exception $e) {
+                               $this->logger->error('Failed to update existing version for ' . $node->getPath(), [
+                                       'exception' => $e,
+                                       'versionCreated' => $writeHookInfo['versionCreated'],
+                                       'previousNode' => [
+                                               'size' => $writeHookInfo['previousNode']->getSize(),
+                                               'mtime' => $writeHookInfo['previousNode']->getMTime(),
+                                       ],
+                                       'node' => [
+                                               'size' => $node->getSize(),
+                                               'mtime' => $node->getMTime(),
+                                       ]
+                               ]);
+                               throw $e;
+                       }
                }
 
                unset($this->writeHookInfo[$node->getId()]);