From e33658f366ab60494a887b474fa4b0b637fb0588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Jedenastik?= Date: Wed, 20 Apr 2022 13:20:03 +0200 Subject: [PATCH] TASK: TaskExecutionHistory removes non existing task handlers --- Classes/Domain/Task/TaskExecutionHistory.php | 22 ++++++++++++++++++++ Configuration/Settings.yaml | 1 + 2 files changed, 23 insertions(+) diff --git a/Classes/Domain/Task/TaskExecutionHistory.php b/Classes/Domain/Task/TaskExecutionHistory.php index 8544ac5..f11fca2 100644 --- a/Classes/Domain/Task/TaskExecutionHistory.php +++ b/Classes/Domain/Task/TaskExecutionHistory.php @@ -34,6 +34,12 @@ class TaskExecutionHistory */ protected int $keepTaskExecutionHistory = 3; + /** + * @Flow\InjectConfiguration(package="Flowpack.Task", path="keepRemovedTasksInTaskExecutionHistory") + * @var bool + */ + protected bool $keepRemovedTasksInTaskExecutionHistory = false; + /** * @Flow\Inject * @var TaskCollectionFactory @@ -50,8 +56,11 @@ public function cleanup(): void { $removedTaskExecutions = 0; + $configuredTaskHandlerClasses = []; + /** @var Task $task */ foreach ($this->taskCollectionFactory->buildTasksFromConfiguration() as $task) { + $configuredTaskHandlerClasses[] = $task->getHandlerClass(); /** @var TaskExecution $taskExecution */ foreach ($this->taskExecutionRepository->findLatestExecution($task, 0, $this->keepTaskExecutionHistory) as $taskExecution) { $this->taskExecutionRepository->remove($taskExecution); @@ -59,6 +68,19 @@ public function cleanup(): void } } + if ($this->keepRemovedTasksInTaskExecutionHistory === false) { + $configuredTaskHandlerClasses = \array_unique($configuredTaskHandlerClasses); + + /** @var TaskExecution $taskExecution */ + foreach ($this->taskExecutionRepository->findAll() as $taskExecution) { + $taskHandlerClass = $taskExecution->getHandlerClass(); + if (!\in_array($taskHandlerClass, $configuredTaskHandlerClasses) || !class_exists($taskHandlerClass)) { + $this->taskExecutionRepository->remove($taskExecution); + $removedTaskExecutions++; + } + } + } + if ($removedTaskExecutions > 0) { $this->logger->info(sprintf('Removed %s completed task executions', $removedTaskExecutions), LogEnvironment::fromMethodName(__METHOD__)); } diff --git a/Configuration/Settings.yaml b/Configuration/Settings.yaml index 03b6848..08307a3 100644 --- a/Configuration/Settings.yaml +++ b/Configuration/Settings.yaml @@ -4,3 +4,4 @@ Flowpack: lockStorage: 'flock://%FLOW_PATH_TEMPORARY%/SymfonyLockStorage' tasks: [] keepTaskExecutionHistory: 3 + keepRemovedTasksInTaskExecutionHistory: true