You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Ben Craig (JIRA)" <ji...@apache.org> on 2013/11/03 23:21:17 UTC

[jira] [Commented] (THRIFT-2243) TNonblockingServer in thrift crashes when TFramedTransport opens

    [ https://issues.apache.org/jira/browse/THRIFT-2243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13812506#comment-13812506 ] 

Ben Craig commented on THRIFT-2243:
-----------------------------------

I am confused about the client side.  The code you have posted doesn't ever do anything with MyService.Client, or with the binary protocol.  Does the server crash still reproduce if you reduce the client code to the following:

transport = TSocket.TSocket(host, port)
transport.open()

For what it's worth, I haven't been able to reproduce the issue on Windows, with a C++ client.

> TNonblockingServer in thrift crashes when TFramedTransport opens
> ----------------------------------------------------------------
>
>                 Key: THRIFT-2243
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2243
>             Project: Thrift
>          Issue Type: Bug
>          Components: C++ - Library
>    Affects Versions: 0.8, 0.9.1
>         Environment: Ubuntu 12.04
>            Reporter: julien greard
>            Priority: Blocker
>              Labels: nonblocking
>             Fix For: 0.9.2
>
>
> This bug is also a question on StackOverflow, the code extracts are easier to read here : http://stackoverflow.com/questions/19586340/tnonblockingserver-in-thrift-crashes-when-tframedtransport-opens
> I've been trying to implement a thrift server in C++ to communicate with a Python client.
> here is my code:
> C++ server:
>     
>     shared_ptr<ThriftHandler> _handler (new myHandler());
>     shared_ptr<TProcessor> _processor (new myService(_handler));
>     shared_ptr<TProtocolFactory> _protocolFactory (new TBinaryProtocolFactory());
>     shared_ptr<ThreadManager> _threadManager = ThreadManager::newSimpleThreadManager(15);
>     shared_ptr<PosixThreadFactory> _threadFactory(new PosixThreadFactory());
>     _threadManager->threadFactory(_threadFactory);
>     _threadManager->start();
>     shared_ptr<TNonblockingServer> _server(new TNonblockingServer(_processor, _protocolFactory, 9090 ,_threadManager));;
>     _server->serve();
> Python Client code:
>     transport = TSocket.TSocket(host, port)
>     transport = TTransport.TFramedTransport(transport)
>     protocol = TBinaryProtocol.TBinaryProtocol(transport)
>     client = MyService.Client(protocol)
>     transport.open()
>     log.info("connection success!")
> When I start the server and then the client, I get the following:
> On the client side (Python):
>     ./myPythonExec.py
>     connection success!
>     socket.error: [Errno 104] Connection reset by peer
> On the server side (c++):
>     assertion " 0 " failed
>     0  0x00007ffff0942425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
>     1  0x00007ffff0945b8b in __GI_abort () at abort.c:91
>     2  0x00007ffff093b0ee in __assert_fail_base (fmt=<optimized out>, assertion=0x7ffff1438f1a "0", 
>     file=0x7ffff1439298 "src/server/TNonblockingServer.cpp", line=<optimized out>, function=<optimized out>) at assert.c:94
>     3  0x00007ffff093b192 in __GI___assert_fail (assertion=0x7ffff1438f1a "0", file=0x7ffff1439298 "src/server/TNonblockingServer.cpp", 
>     line=558, function=0x7ffff1439c60 "void apache::thrift::server::TNonblockingServer::TConnection::workSocket()") at assert.c:103
>     4  0x00007ffff14336e4 in apache::thrift::server::TNonblockingServer::TConnection::workSocket (this=0x7fffc0004ac0)
>     at src/server/TNonblockingServer.cpp:558
>     5  0x00007ffff11ed94c in event_base_loop () from /usr/lib/libevent-2.0.so.5
> I've tested this bug on thrift 0.8.0 and 0.9.1
> It works perfectly when using a TSimpleServer on C++ and a TBufferedTransport on the client side



--
This message was sent by Atlassian JIRA
(v6.1#6144)