|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2010-09-15 17:34 UTC] jhalickman at etsy dot com
Description:
------------
The wait() and work() methods on GearmanWorker were causing
timeout warnings to be logged very often. This caused our logs
to be filled up with unnecessary warning logs. I have patched
our copy of the extension and am submitting that diff back to
be included in the mainline.
Reproduce code:
---------------
--- gearman-0.7.0/php_gearman.c 1970-01-01 09:13:08.000000000 +0000
+++ gearman-php-fix/php_gearman.c 2010-09-15 16:40:09.000000000 +0000
@@ -3285,7 +3285,7 @@
obj->ret= gearman_worker_wait(&(obj->worker));
- if (! PHP_GEARMAN_CLIENT_RET_OK(obj->ret)) {
+ if (! PHP_GEARMAN_CLIENT_RET_OK(obj->ret) && obj->ret != GEARMAN_TIMEOUT) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
gearman_worker_error(&(obj->worker)));
RETURN_FALSE;
@@ -3531,7 +3531,8 @@
obj->ret= gearman_worker_work(&(obj->worker));
if (obj->ret != GEARMAN_SUCCESS && obj->ret != GEARMAN_IO_WAIT &&
- obj->ret != GEARMAN_WORK_FAIL) {
+ obj->ret != GEARMAN_WORK_FAIL && obj->ret != GEARMAN_TIMEOUT &&
+ obj->ret != GEARMAN_NO_JOBS) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s",
gearman_worker_error(&(obj->worker)));
RETURN_FALSE;
Expected result:
----------------
No Logs
Actual result:
--------------
PHP error logs got filled with the following:
[17-Sep-2010 09:14:06] WARNING: GearmanWorker::wait():
gearman_wait:timeout reached ...
[17-Sep-2010 09:14:06] WARNING: GearmanWorker::work():
gearman_wait:timeout reached ...
[17-Sep-2010 09:14:06] WARNING: GearmanWorker::wait():
gearman_wait:timeout reached ...
[17-Sep-2010 09:14:06] WARNING: GearmanWorker::work():
gearman_wait:timeout reached ...
[17-Sep-2010 09:14:06] WARNING: GearmanWorker::wait():
gearman_wait:timeout reached ...
[17-Sep-2010 09:14:06] WARNING: GearmanWorker::work():
gearman_wait:timeout reached ...
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 02:00:01 2025 UTC |
In gearman-0.8.0, the work function has a second if block, which checks the response and returns false without the logging, but the wait function does not. I have modified jhalickman's patch to correct this. --- gearman-0.8.0/php_gearman.c 2011-05-17 22:51:44.000000000 +0930 +++ gearman-0.8.0-fixed/php_gearman.c 2011-08-10 10:36:38.163397253 +0930 @@ -3303,12 +3303,17 @@ obj->ret= gearman_worker_wait(&(obj->worker)); - if (! PHP_GEARMAN_CLIENT_RET_OK(obj->ret)) { + if (! PHP_GEARMAN_CLIENT_RET_OK(obj->ret) && + obj->ret != GEARMAN_TIMEOUT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", gearman_worker_error(&(obj- >worker))); RETURN_FALSE; } + if (! PHP_GEARMAN_CLIENT_RET_OK(obj->ret)) { + RETURN_FALSE; + } + RETURN_TRUE; } @@ -3554,7 +3559,8 @@ obj->ret= gearman_worker_work(&(obj->worker)); if (obj->ret != GEARMAN_SUCCESS && obj->ret != GEARMAN_IO_WAIT && - obj->ret != GEARMAN_WORK_FAIL) { + obj->ret != GEARMAN_WORK_FAIL && obj->ret != GEARMAN_TIMEOUT && + obj->ret != GEARMAN_NO_JOBS) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", gearman_worker_error(&(obj->worker))); RETURN_FALSE;With 0.8.1 we still observed a warning coming from the 'work' method: Warning: GearmanWorker::work(): (null) in <filename> Note the absence of any actual error message. This was using libgearman version 0.34. This patch corrected the problem for us: --- gearman-0.8.1/php_gearman.c 2012-08-03 12:26:52.193736013 +1000 +++ gearman-0.8.1-patched/php_gearman.c 2012-08-03 12:27:30.394733400 +1000 @@ -3562,7 +3562,8 @@ obj->ret= gearman_worker_work(&(obj->worker)); if (obj->ret != GEARMAN_SUCCESS && obj->ret != GEARMAN_IO_WAIT && - obj->ret != GEARMAN_WORK_FAIL && obj->ret != GEARMAN_TIMEOUT) { + obj->ret != GEARMAN_WORK_FAIL && obj->ret != GEARMAN_TIMEOUT && + obj->ret != GEARMAN_NO_JOBS) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", gearman_worker_error(&(obj->worker))); RETURN_FALSE; -- Marcus