thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Curtis Spencer <tho...@gmail.com>
Subject Help Debugging Periodic Error
Date Wed, 06 May 2009 22:01:45 GMT
Hi,

First message to the thrift list.  Thanks for releasing such a great
technology.

I have been mainly using the C++ versions of client and server, but I
have been rarely encountering a problem that I don't really have much
data to help discern.
I wanted to see if this is something others had encountered and
whether or not I am doing something silly.

The problem I see is that my application servers (which are the
clients to a thrift service) periodically hang.  I can restart the
thrift service and the application servers (without restart) are happy
again.

The only output I see is at the thrift service level and what I get is this:

TServerTransport died on accept: Called write on non-open socket
Thrift: Wed May  6 09:30:07 2009 TSocket::write() send() <Host:  Port:
0>Broken pipe
TSimpleServer client died: write() send(): Broken pipe
TServerTransport died on accept: Called write on non-open socket
Thrift: Wed May  6 09:30:07 2009 TSocket::write() send() <Host:  Port:
0>Broken pipe
TSimpleServer client died: write() send(): Broken pipe
TServerTransport died on accept: Called write on non-open socket
Thrift: Wed May  6 09:30:07 2009 TSocket::write() send() <Host:  Port:
0>Broken pipe
TSimpleServer client died: write() send(): Broken pipe
TServerTransport died on accept: Called write on non-open socket
Thrift: Wed May  6 09:30:07 2009 TSocket::write() send() <Host:  Port:
0>Broken pipe
TSimpleServer client died: write() send(): Broken pipe
TServerTransport died on accept: Called write on non-open socket
Thrift: Wed May  6 09:30:07 2009 TSocket::write() send() <Host:  Port:
0>Broken pipe
TSimpleServer client died: write() send(): Broken pipe
TServerTransport died on accept: Called write on non-open socket
TSimpleServer client died: No more data to read.

For the next time I see it happen, I now have them both running with
debug symbols so i will attach to them with gdb and see exactly where
they are at, so I can add more information to this thread.

As for the client/server code, my server looks pretty cookie cutter:

int main(int argc, char **argv) {
  int port = 9092;
  shared_ptr<MyHandler> handler(new MyHandler());
  shared_ptr<TProcessor> processor(new MyProcessor(handler));
  shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
  shared_ptr<TTransportFactory> transportFactory(new
TBufferedTransportFactory());
  shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());

  TSimpleServer server(processor, serverTransport, transportFactory,
protocolFactory);
  server.serve();
  return 0;
}

My client that does the connection is:

  shared_ptr<TSocket> socket(new TSocket(host_name,port)));
  socket->setConnTimeout(THRIFT_TIMEOUT);  // Which Equals 10000
  socket->setRecvTimeout(THRIFT_TIMEOUT);
  shared_ptr<TTransport> transport(new TBufferedTransport(socket));
  shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
  MyClient client(protocol);
  try {
    transport->open();
    client.mycall(results);
    transport->close();
  } catch (TException &tx) {
    cerr << "Caught Exception" << endl;
  }


Anything look fishy there?

Thanks in advance,
Curtis

Mime
View raw message