From: Julius Härtl Date: Tue, 7 Jul 2020 10:36:59 +0000 (+0200) Subject: Add removal of mounts without storages to files:cleanup command X-Git-Tag: v20.0.0beta1~289^2~1 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=479aa975d38f3d7cb274b28ccaa322fc316bbb57;p=nextcloud-server.git Add removal of mounts without storages to files:cleanup command Signed-off-by: Julius Härtl --- 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; + } }