mirror of
https://github.com/nextcloud/server.git
synced 2026-05-14 09:29:52 -04:00
fix(files_versions): Do not expire versions newer than min age
The auto expire logic does not take into account the min retention age set by the admin. So versions were eagerly deleted. Fix https://github.com/nextcloud/server/issues/19791 Signed-off-by: Louis Chemineau <louis@chmn.me>
This commit is contained in:
parent
5b421c99c6
commit
46b1825f2d
2 changed files with 23 additions and 1 deletions
|
|
@ -98,6 +98,20 @@ class Expiration {
|
|||
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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -696,7 +696,15 @@ class Storage {
|
|||
$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
|
||||
|
|
|
|||
Loading…
Reference in a new issue