22
33namespace G4 \Tasker \Model \Repository \Mysql ;
44
5-
65use G4 \Tasker \Consts ;
76use G4 \Tasker \Model \Domain \Task ;
87use 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