]> source.dussan.org Git - nextcloud-server.git/commitdiff
Catch storage not available in versions expire command 24367/head
authorChristoph Wurst <christoph@winzerhof-wurst.at>
Wed, 25 Nov 2020 08:28:38 +0000 (09:28 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Wed, 25 Nov 2020 10:40:21 +0000 (10:40 +0000)
External storage with session credentials is not accessible without a
user session, hence background jobs and CLI commands can't work with
them. The previously unhandled exception causes logged errors in the
nextcloud log. This patch catches the specific exception and logs it as
warnings. So for a production instance the error won't spam their logs
for this non-recoverable and technically unsolvable error if the minimum
log level is set to the default of 3 (error).

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
apps/files_versions/lib/Command/Expire.php

index 1075314c1c43b43439dc4397ab0c58c4ae47835b..bf3400b5018e3ec508402cd438a475c47d8516bc 100644 (file)
@@ -28,6 +28,8 @@ namespace OCA\Files_Versions\Command;
 use OC\Command\FileAccess;
 use OCA\Files_Versions\Storage;
 use OCP\Command\ICommand;
+use OCP\Files\StorageNotAvailableException;
+use OCP\ILogger;
 
 class Expire implements ICommand {
        use FileAccess;
@@ -59,6 +61,20 @@ class Expire implements ICommand {
                        return;
                }
 
-               Storage::expire($this->fileName, $this->user);
+               try {
+                       Storage::expire($this->fileName, $this->user);
+               } catch (StorageNotAvailableException $e) {
+                       // In case of external storage and session credentials, the expiration
+                       // fails because the command does not have those credentials
+
+                       /** @var ILogger $logger */
+                       $logger = \OC::$server->get(ILogger::class);
+
+                       $logger->logException($e, [
+                               'level' => ILogger::WARN,
+                               'uid' => $this->user,
+                               'fileName' => $this->fileName,
+                       ]);
+               }
        }
 }