Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Long running process race condition #21

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

m-hume
Copy link
Contributor

@m-hume m-hume commented Nov 4, 2017

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

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
Copy link

coveralls commented Nov 4, 2017

Coverage Status

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

1 similar comment
@coveralls
Copy link

Coverage Status

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants