Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
Fedora 8, 64bit, php 5.2.4
-
Patch Available
Description
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
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.
Attachments
Attachments
Issue Links
- is superceded by
-
THRIFT-638 BufferedTransport + C extensions block until recv timeout is reached on last fread call
- Closed