From 479aa975d38f3d7cb274b28ccaa322fc316bbb57 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Julius=20H=C3=A4rtl?= Date: Tue, 7 Jul 2020 12:36:59 +0200 Subject: [PATCH] Add removal of mounts without storages to files:cleanup command MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- .../files/lib/Command/DeleteOrphanedFiles.php | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/apps/files/lib/Command/DeleteOrphanedFiles.php b/apps/files/lib/Command/DeleteOrphanedFiles.php index c8ce9729ef7..9795448ff97 100644 --- a/apps/files/lib/Command/DeleteOrphanedFiles.php +++ b/apps/files/lib/Command/DeleteOrphanedFiles.php @@ -78,6 +78,39 @@ class DeleteOrphanedFiles extends Command { } $output->writeln("$deletedEntries orphaned file cache entries deleted"); + + $deletedMounts = $this->cleanupOrphanedMounts(); + $output->writeln("$deletedMounts orphaned mount entries deleted"); return 0; } + + private function cleanupOrphanedMounts() { + $deletedEntries = 0; + + $query = $this->connection->getQueryBuilder(); + $query->select('m.storage_id') + ->from('mounts', 'm') + ->where($query->expr()->isNull('s.numeric_id')) + ->leftJoin('m', 'storages', 's', $query->expr()->eq('m.storage_id', 's.numeric_id')) + ->groupBy('storage_id') + ->setMaxResults(self::CHUNK_SIZE); + + $deleteQuery = $this->connection->getQueryBuilder(); + $deleteQuery->delete('mounts') + ->where($deleteQuery->expr()->eq('storage_id', $deleteQuery->createParameter('storageid'))); + + $deletedInLastChunk = self::CHUNK_SIZE; + while ($deletedInLastChunk === self::CHUNK_SIZE) { + $deletedInLastChunk = 0; + $result = $query->execute(); + while ($row = $result->fetch()) { + $deletedInLastChunk++; + $deletedEntries += $deleteQuery->setParameter('storageid', (int) $row['storage_id']) + ->execute(); + } + $result->closeCursor(); + } + + return $deletedEntries; + } } -- 2.39.5