This is probably the single most common error that anyone will see when they try to set up thrift, it usually means that your server is outputting something other than the output generated by thrift, and particularly in the case of PHP, it's most commonly just an error, warning or notice that gets emmitted and not handled elsewhere, hence output along with the rest of your thrift bytes. The client sees this as nonsense and freaks out.
The best way to debug this is: set display_errors=0 install your own error handler for the more serious problems that logs them somewhere, but doesn't output them catch all exceptions thrown during the duration of your thrift RPC call and throw them back over the wire using some kind of generic extension to TException so that the client can interpret them you should be able to diagnose the problem using a combination of your error logs and inspecting any thrown exceptions client side On Tue, May 27, 2014 at 2:31 PM, Phillip Simbwa <[email protected]> wrote: > @Aaron: > > Thanks for your quick response. > > Let me look into that and see.. > > Thanks > > > On Tue, May 27, 2014 at 8:07 PM, Aaron Mefford <[email protected]> wrote: > > Have you verified that the Protocol and Transport on each end are the > same? > > Are you using a client with the same generated stubs, or is the client in > > another language? > > > > It looks like the server was expecting to read more bytes than it was > sent. > > This would seem to point to some difference in expectations between the > > client and the server. For instance, if the client were using the > compact > > binary protocol it would be sending fewer bytes than would be expected by > > the standard binary protocol. > > > > I am by no means an expert in Thrift or PHP but wanted to offer my > > observations in case they happen to help you find your problem. > > > > > > On 5/27/14, 11:00 AM, Phillip Simbwa wrote: > >> > >> Greetings, > >> > >> I think the thrift-0.9.1 php libs have a bug somewhere. I seem to get > >> this when I try to read the returned values from a client RPC call. > >> > >> > >> 2014/05/27 18:56:54 [error] 8129#0: *9 FastCGI sent in stderr: "PHP > >> message: PHP Fatal error: Uncaught exception > >> 'Thrift\Exception\TTransportException' with message 'TSocket: timed > >> out reading 4 bytes from localhost:9090' in > >> /usr/local/src/thrift-0.9.1/lib/php/lib/Thrift/Transport/TSocket.php:274 > >> Stack trace: > >> #0 > >> > /usr/local/src/thrift-0.9.1/lib/php/lib/Thrift/Transport/TTransport.php(74): > >> Thrift\Transport\TSocket->read(4) > >> #1 > >> > /usr/local/src/thrift-0.9.1/lib/php/lib/Thrift/Transport/TBufferedTransport.php(113): > >> Thrift\Transport\TTransport->readAll(4) > >> #2 > >> > /usr/local/src/thrift-0.9.1/lib/php/lib/Thrift/Protocol/TBinaryProtocol.php(305): > >> Thrift\Transport\TBufferedTransport->readAll(4) > >> #3 > >> > /usr/local/src/thrift-0.9.1/lib/php/lib/Thrift/Protocol/TBinaryProtocol.php(197): > >> Thrift\Protocol\TBinaryProtocol->readI32(NULL) > >> #4 /srv/www/vhosts/async/lib/v1/php/gen-php/wiadSysAPIv1.php(114): > >> Thrift\Protocol\TBinaryProtocol->readMessageBegin(NULL, 0, 0) > >> #5 /srv/www/vhosts/async/lib/v1/php/gen-php/wiadSysAPIv1.php(82): > >> wiadSysAPIv1Client->recv_createUser() > >> > >> > >> And my .thrift file looks like this: > >> > >> struct useraccount { > >> 1:i64 uid, > >> 2:string owner, > >> 3:string email, > >> 4:string passwd, > >> 5:i32 enabled, > >> 6:i32 deleted, > >> 7:i32 gid, > >> 8:string creator > >> } > >> > >> struct auditf { > >> 1:string schema, > >> 2:string table, > >> 3:i64 uid, > >> 4:i64 gid, > >> 5:string account, > >> 6:string ip, > >> 7:string qtype, > >> 8:string vafter, > >> 9:string vbefore, > >> 10:string detail > >> } > >> > >> service wiadSysAPIv1 { > >> i32 ping(), > >> string createUser(1:auditf af, 2:useraccount u) > >> } > >> > >> > >> Can someone advise on how I can get around this? > >> > >> > > > > > > -- > - Phillip. > > "Aoccdrnig to rscheearch at an Elingsh uinervtisy, it deosn't mttaer in > waht > oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist > and lsat ltteer are in the rghit pclae. > The rset can be a toatl mses and > you can sitll raed it wouthit a porbelm. Tihs is bcuseae we do not raed > ervey lteter by it slef but the wrod as a wlohe and the biran fguiers it > out aynawy." >
