Max execution time margin for OpportunisticQM

I guess it could continue a bit too long in case it got a really long
(failing, timeouting) HTTP request just before max_execution_time hit.
This commit is contained in:
Mikael Nordfeldth 2016-01-07 11:58:09 +01:00
parent 94392ab00c
commit e7308b0ecb

View File

@ -18,12 +18,13 @@ class OpportunisticQueueManager extends DBQueueManager
{ {
protected $qmkey = false; protected $qmkey = false;
protected $max_execution_time = null; protected $max_execution_time = null;
protected $max_execution_margin = null; // margin to execution time, including timeouts etc.
protected $max_queue_items = null; protected $max_queue_items = null;
protected $started_at = null; protected $started_at = null;
protected $handled_items = 0; protected $handled_items = 0;
const MAXEXECTIME = 30; // typically just used for the /main/cron action const MAXEXECTIME = 10; // typically just used for the /main/cron action, only used if php.ini max_execution_time is 0
public function __construct(array $args=array()) { public function __construct(array $args=array()) {
foreach (get_class_vars(get_class($this)) as $key=>$val) { foreach (get_class_vars(get_class($this)) as $key=>$val) {
@ -41,6 +42,10 @@ class OpportunisticQueueManager extends DBQueueManager
$this->max_execution_time = ini_get('max_execution_time') ?: self::MAXEXECTIME; $this->max_execution_time = ini_get('max_execution_time') ?: self::MAXEXECTIME;
} }
if ($this->max_execution_margin === null) {
$this->max_execution_margin = 10; // should be calculated from our default timeouts for http requests etc.
}
return parent::__construct(); return parent::__construct();
} }
@ -60,7 +65,7 @@ class OpportunisticQueueManager extends DBQueueManager
return false; return false;
} }
// If too much time has passed, stop // If too much time has passed, stop
if ($time_passed >= $this->max_execution_time) { if ($time_passed >= $this->max_execution_time - $this->max_execution_margin) {
return false; return false;
} }
// If we have a max-item-limit, check if it has been passed // If we have a max-item-limit, check if it has been passed