Skip to content

Commit c04d59d

Browse files
authored
Merge pull request #50 from mirko-bukilic/master
Added method for deleting processed tasks
2 parents 21b6cc7 + befed55 commit c04d59d

1 file changed

Lines changed: 29 additions & 1 deletion

File tree

src/Model/Repository/Mysql/TaskRepository.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace G4\Tasker\Model\Repository\Mysql;
44

5-
65
use G4\Tasker\Consts;
76
use G4\Tasker\Model\Domain\Task;
87
use G4\Tasker\Model\Repository\TaskRepositoryInterface;
@@ -18,6 +17,10 @@ class TaskRepository implements TaskRepositoryInterface
1817
const REBALANCE_LIMIT = 1000; // how many tasks to rebalance at once
1918
const REBALANCE_TIME_IN_FUTURE = 3600; // seconds in future tasks to rebalance
2019

20+
const DELETE_TASKS_OLDER_THAN = 86400 * 2; // 2 days
21+
const DELETE_TASKS_LIMIT = 2000;
22+
23+
2124
/**
2225
* @var \PDO
2326
*/
@@ -263,6 +266,31 @@ private function prepareFields(\PDOStatement $stmt, Task $task)
263266
return $stmt;
264267
}
265268

269+
/**
270+
* @param int $olderThan
271+
* @param int $limit
272+
* @return void
273+
*/
274+
public function deleteProcessedTasks(
275+
$olderThan = self::DELETE_TASKS_OLDER_THAN,
276+
$limit = self::DELETE_TASKS_LIMIT
277+
) {
278+
$query = sprintf(
279+
'DELETE FROM %s
280+
WHERE status IN (:status_done, :status_sent_to_queue) AND ts_created <= :ts_created
281+
ORDER BY ts_created ASC LIMIT :limit',
282+
Consts::TASKS_TABLE_NAME
283+
);
284+
285+
$stmt = $this->pdo->prepare($query);
286+
$stmt->bindValue(':status_done', Consts::STATUS_DONE, \PDO::PARAM_INT);
287+
$stmt->bindValue(':status_sent_to_queue', Consts::STATUS_SENT_TO_QUEUE_FOR_EXECUTION, \PDO::PARAM_INT);
288+
$stmt->bindValue(':limit', $limit, \PDO::PARAM_INT);
289+
$stmt->bindValue(':ts_created', time() - $olderThan, \PDO::PARAM_INT);
290+
291+
$stmt->execute();
292+
}
293+
266294
private function execute(\PDOStatement $stmt, $data = null)
267295
{
268296
$inTransaction = $this->pdo->inTransaction();

0 commit comments

Comments
 (0)