|
@@ -12,6 +12,7 @@ use App\Service\Cron\BaseCronJob;
|
|
|
use App\Service\File\Storage\LocalStorage;
|
|
use App\Service\File\Storage\LocalStorage;
|
|
|
use App\Service\Utils\DatesUtils;
|
|
use App\Service\Utils\DatesUtils;
|
|
|
use Doctrine\DBAL\Connection;
|
|
use Doctrine\DBAL\Connection;
|
|
|
|
|
+use Doctrine\ORM\EntityManagerInterface;
|
|
|
use Doctrine\ORM\QueryBuilder;
|
|
use Doctrine\ORM\QueryBuilder;
|
|
|
use JetBrains\PhpStorm\Pure;
|
|
use JetBrains\PhpStorm\Pure;
|
|
|
|
|
|
|
@@ -33,6 +34,7 @@ class CleanTempFiles extends BaseCronJob
|
|
|
private Connection $connection,
|
|
private Connection $connection,
|
|
|
private FileRepository $fileRepository,
|
|
private FileRepository $fileRepository,
|
|
|
private LocalStorage $storage,
|
|
private LocalStorage $storage,
|
|
|
|
|
+ private EntityManagerInterface $entityManager,
|
|
|
) {
|
|
) {
|
|
|
parent::__construct();
|
|
parent::__construct();
|
|
|
}
|
|
}
|
|
@@ -100,21 +102,20 @@ class CleanTempFiles extends BaseCronJob
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Delete the files.
|
|
|
|
|
|
|
+ * Set DELETION_REQUESTED status for all files regardless of host.
|
|
|
*
|
|
*
|
|
|
* @param array<File> $files
|
|
* @param array<File> $files
|
|
|
*/
|
|
*/
|
|
|
protected function deleteFiles(array $files): void
|
|
protected function deleteFiles(array $files): void
|
|
|
{
|
|
{
|
|
|
$total = count($files);
|
|
$total = count($files);
|
|
|
- $this->logger->info($total.' temporary files to be removed');
|
|
|
|
|
|
|
+ $this->logger->info($total.' temporary files to be marked for deletion');
|
|
|
|
|
|
|
|
$this->connection->setAutoCommit(false);
|
|
$this->connection->setAutoCommit(false);
|
|
|
- $queryBuilder = $this->fileRepository->createQueryBuilder('f');
|
|
|
|
|
|
|
|
|
|
- $this->logger->info('Deleting files...');
|
|
|
|
|
|
|
+ $this->logger->info('Marking files for deletion...');
|
|
|
$i = 0;
|
|
$i = 0;
|
|
|
- $deleted = 0;
|
|
|
|
|
|
|
+ $marked = 0;
|
|
|
$this->ui->progress(0, $total);
|
|
$this->ui->progress(0, $total);
|
|
|
|
|
|
|
|
foreach ($files as $file) {
|
|
foreach ($files as $file) {
|
|
@@ -123,14 +124,13 @@ class CleanTempFiles extends BaseCronJob
|
|
|
++$i;
|
|
++$i;
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- // Delete from disk
|
|
|
|
|
- $this->storage->hardDelete($file);
|
|
|
|
|
-
|
|
|
|
|
- // Remove from DB
|
|
|
|
|
- $queryBuilder->delete()->where('f.id = :id')->setParameter('id', $file->getId());
|
|
|
|
|
|
|
+ // Set DELETION_REQUESTED status for all files regardless of host
|
|
|
|
|
+ $file->setStatus(FileStatusEnum::DELETION_REQUESTED);
|
|
|
|
|
+ $this->entityManager->persist($file);
|
|
|
|
|
+ $this->entityManager->flush();
|
|
|
|
|
+ ++$marked;
|
|
|
|
|
|
|
|
$this->connection->commit();
|
|
$this->connection->commit();
|
|
|
- ++$deleted;
|
|
|
|
|
} catch (\RuntimeException|\InvalidArgumentException $e) {
|
|
} catch (\RuntimeException|\InvalidArgumentException $e) {
|
|
|
// Non blocking errors
|
|
// Non blocking errors
|
|
|
$this->connection->rollback();
|
|
$this->connection->rollback();
|
|
@@ -141,7 +141,7 @@ class CleanTempFiles extends BaseCronJob
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $this->logger->info($deleted.' files deleted');
|
|
|
|
|
|
|
+ $this->logger->info($marked.' files marked for deletion');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
protected function getQueryConditions(QueryBuilder $queryBuilder, \DateTime $maxDate): void
|
|
protected function getQueryConditions(QueryBuilder $queryBuilder, \DateTime $maxDate): void
|
|
@@ -153,7 +153,6 @@ class CleanTempFiles extends BaseCronJob
|
|
|
$queryBuilder->expr()->eq('f.status', ':status')
|
|
$queryBuilder->expr()->eq('f.status', ':status')
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
|
- ->andWhere($queryBuilder->expr()->eq('f.host', ':host'))
|
|
|
|
|
->andWhere(
|
|
->andWhere(
|
|
|
$queryBuilder->expr()->orX(
|
|
$queryBuilder->expr()->orX(
|
|
|
$queryBuilder->expr()->lt('f.createDate', ':maxDate'),
|
|
$queryBuilder->expr()->lt('f.createDate', ':maxDate'),
|
|
@@ -161,7 +160,6 @@ class CleanTempFiles extends BaseCronJob
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
|
->setParameter('temporaryTrue', true)
|
|
->setParameter('temporaryTrue', true)
|
|
|
- ->setParameter('host', FileHostEnum::AP2I)
|
|
|
|
|
->setParameter('status', FileStatusEnum::DELETED)
|
|
->setParameter('status', FileStatusEnum::DELETED)
|
|
|
->setParameter('maxDate', $maxDate->format('Y-m-d'))
|
|
->setParameter('maxDate', $maxDate->format('Y-m-d'))
|
|
|
;
|
|
;
|