PHP TSocket Timeout Issues
--------------------------

                 Key: THRIFT-347
                 URL: https://issues.apache.org/jira/browse/THRIFT-347
             Project: Thrift
          Issue Type: Bug
          Components: Library (PHP)
         Environment: Fedora 8, 64bit, php 5.2.4
            Reporter: Gary Richardson


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.

Reply via email to