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.