Trying to recreate a task after a long running process ends in a race condition in the pdo module (actually any db calls through the pdo module for this task)
When you pass the pdo object to the _testConnection(\PDO $pdo) function its actually receives the value of the reference to the pdo object.
Setting it to null in the catch statement doesn't set $this->_pdo = null; only the local $pdo variable
You need to pass it a reference to the reference
To test firstly see what you're mysql timeouts are set to using
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';
put a sleep in your test task longer than the largest one (its in seconds)
see a race condition as $this->_testConnection() calls $this->_getPdo(); while $this->_pdo stays not null.... and repeat
Coverage remained the same at 56.604% when pulling 4ecb5817d59f00fc551023392de0f0d92fa76f42 on m-hume:patch-3 into 144777bab9047b807db1fc270fb21d687235e48b on anorgan:master.
Coverage remained the same at 56.604% when pulling 4ecb5817d59f00fc551023392de0f0d92fa76f42 on m-hume:patch-3 into 144777bab9047b807db1fc270fb21d687235e48b on anorgan:master.
Trying to recreate a task after a long running process ends in a race condition in the pdo module (actually any db calls through the pdo module for this task)
When you pass the pdo object to the
_testConnection(\PDO $pdo)
function its actually receives the value of the reference to the pdo object. Setting it to null in the catch statement doesn't set$this->_pdo = null;
only the local$pdo
variable You need to pass it a reference to the referenceTo test firstly see what you're mysql timeouts are set to using
put a sleep in your test task longer than the largest one (its in seconds) see a race condition as
$this->_testConnection()
calls$this->_getPdo();
while$this->_pdo
stays not null.... and repeatAt least this is so in php v5.6.32 mh