anorgan / QuTee

PHP Background Jobs (Tasks) Manager
GNU Lesser General Public License v2.1
72 stars 12 forks source link

Long running process race condition #21

Open m-hume opened 6 years ago

m-hume commented 6 years ago

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

At least this is so in php v5.6.32 mh

coveralls commented 6 years ago

Coverage Status

Coverage remained the same at 56.604% when pulling 4ecb5817d59f00fc551023392de0f0d92fa76f42 on m-hume:patch-3 into 144777bab9047b807db1fc270fb21d687235e48b on anorgan:master.

coveralls commented 6 years ago

Coverage Status

Coverage remained the same at 56.604% when pulling 4ecb5817d59f00fc551023392de0f0d92fa76f42 on m-hume:patch-3 into 144777bab9047b807db1fc270fb21d687235e48b on anorgan:master.