From 19678d182fac9c01569324212e9d643a4013cfc5 Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Wed, 25 Nov 2020 09:28:38 +0100 Subject: [PATCH] Catch storage not available in versions expire command 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 --- apps/files_versions/lib/Command/Expire.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/files_versions/lib/Command/Expire.php b/apps/files_versions/lib/Command/Expire.php index 55f88aba688ef..723cc860fd06b 100644 --- a/apps/files_versions/lib/Command/Expire.php +++ b/apps/files_versions/lib/Command/Expire.php @@ -28,6 +28,8 @@ 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 @@ public function handle() { 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->query(ILogger::class); + + $logger->logException($e, [ + 'level' => ILogger::WARN, + 'uid' => $this->user, + 'fileName' => $this->fileName, + ]); + } } }