You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Takuya Watabe (JIRA)" <ji...@apache.org> on 2010/10/10 14:59:32 UTC

[jira] Updated: (THRIFT-347) PHP TSocket Timeout Issues

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

Takuya Watabe updated THRIFT-347:
---------------------------------

    Attachment: TSocket.php.patch

I found similar problem on Hive (thirft v0.50), and patch on this page was not enough for my case.
This is the patch for my case.

By using this patch, my php code below is working.

// Set up the transport/protocol/client
$transport = new TSocket('localhost', 10000);
$protocol = new TBinaryProtocol($transport);
$client = new ThriftHiveClient($protocol);
$transport->open();
$client->execute('SELECT * from sample order by id desc');
var_dump($client->fetchAll());
$transport->close();

> PHP TSocket Timeout Issues
> --------------------------
>
>                 Key: THRIFT-347
>                 URL: https://issues.apache.org/jira/browse/THRIFT-347
>             Project: Thrift
>          Issue Type: Bug
>          Components: PHP - Library
>         Environment: Fedora 8, 64bit, php 5.2.4
>            Reporter: Gary Richardson
>         Attachments: TSocket.php.diff, TSocket.php.patch
>
>
> I'm working with the Hive thrift service and I get the following exception when I execute a SELECT statement:
> PHP Fatal error:  Uncaught exception 'TException' with message 'TSocket: timed out reading 4 bytes from localhost:10000' in /root/leap/dev/servers/hive/thriftroot/
> transport/TSocket.php:228
> Stack trace:
> #0 /root/leap/dev/servers/hive/thriftroot/protocol/TBinaryProtocol.php(292): TSocket->readAll(4)
> #1 /root/leap/dev/servers/hive/thriftroot/protocol/TBinaryProtocol.php(184): TBinaryProtocol->readI32(NULL)
> #2 /root/leap/dev/servers/hive/thriftroot/packages/hive_service/ThriftHive.php(59): TBinaryProtocol->readMessageBegin(NULL, 0, 0)
> #3 /root/leap/dev/servers/hive/thriftroot/packages/hive_service/ThriftHive.php(28): ThriftHiveClient->recv_execute()
> #4 /root/leap/dev/servers/hive/testscript.php(30): ThriftHiveClient->execute('SELECT num FROM...')
> #5 {main}
>   thrown in /root/leap/dev/servers/hive/thriftroot/transport/TSocket.php on line 228
> The script I'm using to cause this is:
> ======================================
> #!/usr/bin/php
> <?php
> $GLOBALS['THRIFT_ROOT'] = 'thriftroot/';
> require_once $GLOBALS['THRIFT_ROOT'] . 'packages/hive_service/ThriftHive.php';
> require_once $GLOBALS['THRIFT_ROOT'] . 'transport/TSocket.php';
> require_once $GLOBALS['THRIFT_ROOT'] . 'protocol/TBinaryProtocol.php';
> $transport = new TSocket('localhost', 10000);
> $protocol = new TBinaryProtocol($transport);
> $client = new ThriftHiveClient($protocol);
> $transport->open();
> try
> {
>     $client->execute('DROP TABLE testOverThrift');
> }
> catch (Exception $e)
> {
>     error_log("Got exception while trying to drop table: " . $e->getMessage());
> }
> $client->execute('CREATE TABLE testOverThrift (num int)');
> $client->execute('LOAD DATA LOCAL
> 		 INPATH "/root/testdata.txt"
> 		 INTO TABLE testOverThrift');
> $client->execute('SELECT num FROM testOverThrift WHERE num < 5');
> $result = $client->fetchAll();
> var_dump($result);
> ==================================
> I have a patch that fixes the problem that I'll attach. It looks like fetchAll() doesn't know the difference between a timeout and a blocking port.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.