feat: remove orphaned entries from filecache_extended

Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
pull/38933/head
Daniel Kesselberg 12 months ago committed by Daniel
parent 10fc78a9ea
commit 2f6cc92491

@ -24,9 +24,11 @@
*/
namespace OCA\Files\Command;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
@ -44,7 +46,8 @@ class DeleteOrphanedFiles extends Command {
protected function configure(): void {
$this
->setName('files:cleanup')
->setDescription('cleanup filecache');
->setDescription('cleanup filecache')
->addOption('filecache-extended', null, InputOption::VALUE_NONE, 'remove orphaned entries from filecache_extended');
}
public function execute(InputInterface $input, OutputInterface $output): int {
@ -75,11 +78,44 @@ class DeleteOrphanedFiles extends Command {
$output->writeln("$deletedEntries orphaned file cache entries deleted");
if ($input->getOption('filecache-extended')) {
$deletedFileCacheExtended = $this->cleanupOrphanedFileCacheExtended();
$output->writeln("$deletedFileCacheExtended orphaned file cache extended entries deleted");
}
$deletedMounts = $this->cleanupOrphanedMounts();
$output->writeln("$deletedMounts orphaned mount entries deleted");
return self::SUCCESS;
}
private function cleanupOrphanedFileCacheExtended(): int {
$deletedEntries = 0;
$query = $this->connection->getQueryBuilder();
$query->select('fce.fileid')
->from('filecache_extended', 'fce')
->leftJoin('fce', 'filecache', 'fc', $query->expr()->eq('fce.fileid', 'fc.fileid'))
->where($query->expr()->isNull('fc.fileid'))
->setMaxResults(self::CHUNK_SIZE);
$deleteQuery = $this->connection->getQueryBuilder();
$deleteQuery->delete('filecache_extended')
->where($deleteQuery->expr()->in('fileid', $deleteQuery->createParameter('idsToDelete')));
$result = $query->executeQuery();
while ($result->rowCount() > 0) {
$idsToDelete = $result->fetchAll(\PDO::FETCH_COLUMN);
$deleteQuery->setParameter('idsToDelete', $idsToDelete, IQueryBuilder::PARAM_INT_ARRAY);
$deletedEntries += $deleteQuery->executeStatement();
$result = $query->executeQuery();
}
return $deletedEntries;
}
private function cleanupOrphanedMounts(): int {
$deletedEntries = 0;

Loading…
Cancel
Save