From e7308b0ecbaa3d858ddad20d718ebf85375637ab Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Thu, 7 Jan 2016 11:58:09 +0100 Subject: [PATCH] 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. --- .../OpportunisticQM/lib/opportunisticqueuemanager.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/OpportunisticQM/lib/opportunisticqueuemanager.php b/plugins/OpportunisticQM/lib/opportunisticqueuemanager.php index b2dc61e15f..eeabfa531b 100644 --- a/plugins/OpportunisticQM/lib/opportunisticqueuemanager.php +++ b/plugins/OpportunisticQM/lib/opportunisticqueuemanager.php @@ -18,12 +18,13 @@ class OpportunisticQueueManager extends DBQueueManager { protected $qmkey = false; protected $max_execution_time = null; + protected $max_execution_margin = null; // margin to execution time, including timeouts etc. protected $max_queue_items = null; protected $started_at = null; 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()) { 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; } + 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(); } @@ -60,7 +65,7 @@ class OpportunisticQueueManager extends DBQueueManager return false; } // 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; } // If we have a max-item-limit, check if it has been passed