From 49921af3e04522f1b37098df5902776db0bbf728 Mon Sep 17 00:00:00 2001 From: Ilja Neumann Date: Mon, 26 Jun 2023 10:47:29 +0200 Subject: [PATCH] Fix error when version_metadata is enabled and there is no quota (#40847) * Fix error when version_metadata is enabled and there is no quota * changelog --- apps/files_versions/lib/Storage.php | 24 +++++++++++++----------- changelog/unreleased/40847 | 6 ++++++ 2 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 changelog/unreleased/40847 diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 44c18d55f8a3..6233ee62900f 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -469,7 +469,7 @@ public static function renameOrCopy($sourcePath, $targetPath, $operation) { if (self::metaEnabled()) { // NOTE: we need to move current file first as in case of interuption lack of this file could cause issues - + // Also move/copy the current version $src = '/files_versions/' . $sourcePath . MetaStorage::CURRENT_FILE_PREFIX . MetaStorage::VERSION_FILE_EXT; $dst = '/files_versions/' . $targetPath . MetaStorage::CURRENT_FILE_PREFIX . MetaStorage::VERSION_FILE_EXT; @@ -635,7 +635,7 @@ public static function publishCurrentVersion($filename) { if (Filesystem::is_dir($filename) || !Filesystem::file_exists($filename)) { return false; } - + list($uid, $currentFileName) = self::getUidAndFilename($filename); // overwrite current file metadata with minor=false to create new major version @@ -671,7 +671,7 @@ public static function getVersions($uid, $filename) { if ($dirContent === false) { return $versions; } - + // add historical versions if (\is_resource($dirContent)) { while (($entryName = \readdir($dirContent)) !== false) { @@ -682,7 +682,7 @@ public static function getVersions($uid, $filename) { $pathparts = \pathinfo($entryName); $timestamp = \substr($pathparts['extension'], 1); $filename = $pathparts['filename']; - + // ordering key $key = $timestamp . '#' . $filename; @@ -971,15 +971,17 @@ public static function expire($filename, $uid) { // if still not enough free space we rearrange the versions from all files if ($availableSpace <= 0) { $result = self::getFileHelper()->getAllVersions($uid); - $allVersions = $result['all']; + if ($result) { + $allVersions = $result['all']; - foreach ($result['by_file'] as $versions) { - list($toDeleteNew, $size) = self::getExpireList($time, $versions, $availableSpace <= 0); - $toDelete = \array_merge($toDelete, $toDeleteNew); - $sizeOfDeletedVersions += $size; + foreach ($result['by_file'] as $versions) { + list($toDeleteNew, $size) = self::getExpireList($time, $versions, $availableSpace <= 0); + $toDelete = \array_merge($toDelete, $toDeleteNew); + $sizeOfDeletedVersions += $size; + } + $availableSpace = $availableSpace + $sizeOfDeletedVersions; + $versionsSize = $versionsSize - $sizeOfDeletedVersions; } - $availableSpace = $availableSpace + $sizeOfDeletedVersions; - $versionsSize = $versionsSize - $sizeOfDeletedVersions; } // we need to check if we have to remove any empty folder based on the diff --git a/changelog/unreleased/40847 b/changelog/unreleased/40847 new file mode 100644 index 000000000000..c41ba76132da --- /dev/null +++ b/changelog/unreleased/40847 @@ -0,0 +1,6 @@ +Bugfix: Versions expire job does not error with federated shares + +Versions expire job does not error with federated shares when versioning meta- +data is enabled. + +https://github.com/owncloud/core/pull/40847