Merge pull request #50472 from nextcloud/backport/48581/stable30

[stable30] fix: Filter for folders in cleanup old preview job
This commit is contained in:
Andy Scherzinger 2025-01-27 18:29:17 +01:00 committed by GitHub
commit cfc29f8ddd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 38 additions and 7 deletions

View file

@ -77,13 +77,13 @@ class BackgroundCleanupJob extends TimedJob {
$qb->expr()->castColumn('a.name', IQueryBuilder::PARAM_INT), 'b.fileid'
))
->where(
$qb->expr()->isNull('b.fileid')
)->andWhere(
$qb->expr()->eq('a.storage', $qb->createNamedParameter($this->previewFolder->getStorageId()))
)->andWhere(
$qb->expr()->eq('a.parent', $qb->createNamedParameter($this->previewFolder->getId()))
)->andWhere(
$qb->expr()->like('a.name', $qb->createNamedParameter('__%'))
$qb->expr()->andX(
$qb->expr()->isNull('b.fileid'),
$qb->expr()->eq('a.storage', $qb->createNamedParameter($this->previewFolder->getStorageId())),
$qb->expr()->eq('a.parent', $qb->createNamedParameter($this->previewFolder->getId())),
$qb->expr()->like('a.name', $qb->createNamedParameter('__%')),
$qb->expr()->eq('a.mimetype', $qb->createNamedParameter($this->mimeTypeLoader->getId('httpd/unix-directory')))
)
);
if (!$this->isCLI) {

View file

@ -191,13 +191,44 @@ class BackgroundCleanupJobTest extends \Test\TestCase {
$f2 = $appdata->newFolder((string)PHP_INT_MAX - 1);
$f2->newFile('foo.jpg', 'foo');
/*
* Cleanup of OldPreviewLocations should only remove numeric folders on AppData level,
* therefore these files should stay untouched.
*/
$appdata->getFolder('/')->newFile('not-a-directory', 'foo');
$appdata->getFolder('/')->newFile('133742', 'bar');
$appdata = \OC::$server->getAppDataDir('preview');
// AppData::getDirectoryListing filters all non-folders
$this->assertSame(3, count($appdata->getDirectoryListing()));
try {
$appdata->getFolder('/')->getFile('not-a-directory');
} catch (NotFoundException) {
$this->fail('Could not find file \'not-a-directory\'');
}
try {
$appdata->getFolder('/')->getFile('133742');
} catch (NotFoundException) {
$this->fail('Could not find file \'133742\'');
}
$job = new BackgroundCleanupJob($this->timeFactory, $this->connection, $this->getRoot(), $this->mimeTypeLoader, true);
$job->run([]);
$appdata = \OC::$server->getAppDataDir('preview');
// Check if the files created above are still present
// Remember: AppData::getDirectoryListing filters all non-folders
$this->assertSame(0, count($appdata->getDirectoryListing()));
try {
$appdata->getFolder('/')->getFile('not-a-directory');
} catch (NotFoundException) {
$this->fail('Could not find file \'not-a-directory\'');
}
try {
$appdata->getFolder('/')->getFile('133742');
} catch (NotFoundException) {
$this->fail('Could not find file \'133742\'');
}
}
}