Skip to content

Commit

Permalink
fix(files_versions): Do not expire versions newer than min age
Browse files Browse the repository at this point in the history
The auto expire logic does not take into account the min retention age set by the admin. So versions were eagerly deleted.

Fix #19791

Signed-off-by: Louis Chemineau <[email protected]>
  • Loading branch information
artonge committed Feb 19, 2025
1 parent c71bc06 commit 0771906
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
14 changes: 14 additions & 0 deletions apps/files_versions/lib/Expiration.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,20 @@ public function isExpired(int $timestamp, bool $quotaExceeded = false): bool {
return $isOlderThanMax || $isMinReached;
}

/**
* Get minimal retention obligation as a timestamp
*
* @return int|false
*/
public function getMinAgeAsTimestamp() {
$minAge = false;
if ($this->isEnabled() && $this->minAge !== self::NO_OBLIGATION) {
$time = $this->timeFactory->getTime();
$minAge = $time - ($this->minAge * 86400);
}
return $minAge;
}

/**
* Get maximal retention obligation as a timestamp
*
Expand Down
10 changes: 9 additions & 1 deletion apps/files_versions/lib/Storage.php
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,15 @@ protected static function getExpireList($time, $versions, $quotaExceeded = false
$expiration = self::getExpiration();

if ($expiration->shouldAutoExpire()) {
[$toDelete, $size] = self::getAutoExpireList($time, $versions);
// Exclude versions that are newer than the minimum age from the auto expiration logic.
$minAge = $expiration->getMinAgeAsTimestamp();
if ($minAge !== false) {
$versionsToAutoExpire = array_filter($versions, fn ($version) => $version['version'] < $minAge);
} else {
$versionsToAutoExpire = $versions;
}

[$toDelete, $size] = self::getAutoExpireList($time, $versionsToAutoExpire);
} else {
$size = 0;
$toDelete = []; // versions we want to delete
Expand Down

0 comments on commit 0771906

Please sign in to comment.