Completed
Pull Request — master (#40)
by Matthew
17:20
created

StallableJobManager::resetStalledJobs()

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 1
ccs 1
cts 1
cp 1
c 0
b 0
f 0
nc 1
1
<?php
2
3
namespace Dtc\QueueBundle\Manager;
4
5
use Dtc\QueueBundle\Model\RetryableJob;
6
use Dtc\QueueBundle\Model\Job;
7
use Dtc\QueueBundle\Model\StallableJob;
8
9
abstract class StallableJobManager extends PriorityJobManager
10
{
11
    protected $defaultMaxStalls;
12
13
    abstract protected function stallableSave(StallableJob $job);
14
15 43
    abstract public function pruneStalledJobs($workerName = null, $method = null, callable $progressCallback = null);
16
17 43
    abstract public function resetStalledJobs($workerName = null, $method = null, callable $progressCallback = null);
18
19
    public static function getAllStatuses()
20
    {
21 43
        $statuses = parent::getAllStatuses();
22 43
        $statuses[StallableJob::STATUS_STALLED] = 0;
23 43
        $statuses[StallableJob::STATUS_MAX_STALLS] = 0;
24 43
25 43
        return $statuses;
26
    }
27 43
28
    protected function prioritySave(Job $job)
29
    {
30
        if (!$job instanceof StallableJob) {
31
            throw new \InvalidArgumentException('Job is not instanceof '.StallableJob::class);
32
        }
33
34
        if (!$job->getId()) {
35
            if ($job instanceof StallableJob) {
36
                $this->setStallableJobDefaults($job);
37
            }
38
        }
39
40
        return $this->stallableSave($job);
41
    }
42
43 8
    /**
44
     * @param StallableJob $job
45 8
     * @param $retry true if retry
46
     *
47
     * @return bool true if retry
48
     */
49 8
    abstract protected function stallableSaveHistory(StallableJob $job, $retry);
50 4
51
    /**
52
     * @return bool true if retry
53 8
     *
54 2
     * @param Job $job
55
     */
56
    protected function retryableSaveHistory(RetryableJob $job, $retry)
57 6
    {
58
        if (!$job instanceof StallableJob) {
59
            throw new \InvalidArgumentException('job not instance of '.StallableJob::class);
60
        }
61
62
        if ($retry) {
63
            return $this->stallableSaveHistory($job, $retry);
64
        }
65 2
66
        if (StallableJob::STATUS_STALLED === $job->getStatus()) {
67 2
            return $this->stallableSaveHistory($job, $this->updateJobStalled($job));
68
        }
69
70 43
        return $this->stallableSaveHistory($job, false);
71
    }
72 43
73 43
    /**
74 43
     * @param StallableJob $job
75 43
     *
76
     * @return bool false if
77
     */
78
    private function updateJobStalled(StallableJob $job)
79
    {
80 2
        return $this->updateJobMax($job, 'Stalls', StallableJob::STATUS_MAX_STALLS, true);
81
    }
82 2
83
    protected function setStallableJobDefaults(StallableJob $job)
84
    {
85
        if (null === $job->getMaxStalls()) {
86
            $job->setMaxStalls($this->defaultMaxStalls);
87
        }
88 2
    }
89
90 2
    /**
91 2
     * @return int|null
92
     */
93
    public function getDefaultMaxStalls()
94
    {
95
        return $this->defaultMaxStalls;
96
    }
97
98
    /**
99
     * @param int|null $defaultMaxStalls
100
     */
101
    public function setDefaultMaxStalls($defaultMaxStalls)
102
    {
103
        $this->defaultMaxStalls = $defaultMaxStalls;
104
    }
105
}
106