[ 
https://issues.apache.org/jira/browse/THRIFT-2611?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ian Babrou updated THRIFT-2611:
-------------------------------

    Attachment: thrift-php-infinite-cycle.patch

Patch that should fix the problem

> Thrift php bindings hang up
> ---------------------------
>
>                 Key: THRIFT-2611
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2611
>             Project: Thrift
>          Issue Type: Bug
>          Components: PHP - Library
>         Environment: Linux 3.3.1, php-5.3.8-pl0-gentoo
>            Reporter: Ian Babrou
>         Attachments: thrift-php-infinite-cycle.patch
>
>
> Stracing php process that eats 100% cpu showed the next pattern:
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4, 
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000})      = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL)       = 0
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4, 
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000})      = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL)       = 0
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4, 
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000})      = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL)       = 0
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4, 
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000})      = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL)       = 0
> Attaching gdb made this picture more clear:
> (gdb) dump_bt executor_globals.current_execute_data
> [0x259ef3c8] read() 
> /project-path/vendor/thrift/lib/Thrift/Transport/TTransport.php:74
> [0x259ef110] readAll() 
> /project-path/vendor/thrift/lib/Thrift/Transport/TFramedTransport.php:139
> [0x259eeb78] readFrame() 
> /project-path/vendor/thrift/lib/Thrift/Transport/TFramedTransport.php:106
> [0x259ee8e8] read() 
> /project-path/vendor/thrift/lib/Thrift/Transport/TTransport.php:74
> [0x259ee608] readAll() 
> /project-path/vendor/thrift/lib/Thrift/Protocol/TBinaryProtocol.php:305
> [0x259ede70] readI32() 
> /project-path/vendor/thrift/lib/Thrift/Protocol/TBinaryProtocol.php:197
> [0x259ed5a0] readMessageBegin() 
> /project-path/vendor/thrift/packages/Scribe/Thrift/scribe.php:61
> [0x259ed450] recv_Log() 
> /project-path/vendor/thrift/packages/Scribe/Thrift/scribe.php:30
> [0x259ecfa8] Log() /project-path/src/Framework/Logger/ScribeHandler.php:126
> [0x259ecc20] write() 
> /project-path/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php:37
> [0x259ec070] handle() 
> /project-path/vendor/monolog/monolog/src/Monolog/Logger.php:264
> [0x259ebef8] addRecord() 
> /project-path/vendor/monolog/monolog/src/Monolog/Logger.php:485
> [0x259eabe0] warn() /project-path/lib/Cron/CronManager.php:419
> [0x259ea2a0] update() 
> /project-path/src/Topface/SortedSet/Script/ProcessorCronScript.php:80
> [0x259e9c20] run() 
> /project-path/src/Topface/NewDispatcher/NewScriptDispatcher.php:80
> [0x259e97e0] dispatch() /project-path/lib/Application.php:359
> [0x259e41b0] run() /project-path/config/run.php:268
> [0x259e4050] ??? /project-path/bin/cron:10
> Lsof on process with the same behavior and problem fd showed:
> php 25612 www 16u sock 0,5 0t0 4049585261 can't identify protocol
> Looks like php does not expose error (POLLERR is there), and allows to read 
> empty buffer what thrift happily does. EOF doesn't happen and cpu is wasted 
> in infinite cycle.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to