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."
>

Reply via email to