Problems with python tutorials
------------------------------
Key: THRIFT-1062
URL: https://issues.apache.org/jira/browse/THRIFT-1062
Project: Thrift
Issue Type: Bug
Components: Python - Library, Tutorial
Affects Versions: 0.7
Environment: Thrift trunk (svn rev:1071191), python 2.7, FreeBSD/amd64
8-stable
Reporter: Attila Nagy
I'm trying to do some experiments with python and thrift, starting with the
tutorials in the source code.
First test: making tutorials/py.twisted client and server interact.
Started the server with: tutorial/py.twisted]# python PythonServer.py
and the client with:
tutorial/py.twisted]# python PythonClient.py
Traceback (most recent call last):
File "PythonClient.py", line 26, in <module>
from tutorial import Calculator
ImportError: No module named tutorial
The problem is that PythonClient uses the python and not the py.twisted path:
sys.path.append('../gen-py')
changing that to gen-py.twisted solves the problem:
tutorial/py.twisted]# python PythonClient.py
ping()
1+1=2
InvalidOperation: InvalidOperation(what=4, why='Cannot divide by 0')
15-10=5
Check log: 5
Second test: make python twisted server work with python (not the twisted one)
client:
tutorial/py.twisted]# python PythonServer.py
tutorial/py]# python PythonClient.py
TSocket read 0 bytes
Please note here, that the server listens only on IPv4, 127.0.0.1, while the
clients connects to 'localhost', which resolves to ::1 (IPv6) and 127.0.0.1, so
the first connection request is refused and only the seconds succeeds:
12:07:24.887750 IP6 ::1.45100 > ::1.9090: Flags [S], seq 445533509, win 65535,
options [mss 16324,nop,wscale 3,sackOK,TS val 7743539 ecr 0], length 0
12:07:24.887785 IP6 ::1.9090 > ::1.45100: Flags [R.], seq 0, ack 445533510, win
0, length 0
12:07:24.887924 IP 127.0.0.1.48945 > 127.0.0.1.9090: Flags [S], seq 3667752274,
win 65535, options [mss 16344,nop,wscale 3,sackOK,TS val 7743539 ecr 0], length 0
12:07:24.887948 IP 127.0.0.1.9090 > 127.0.0.1.48945: Flags [S.], seq
3988782459, ack 3667752275, win 65535, options [mss 16344,nop,wscale
3,sackOK,TS val 1390952173 ecr 7743539], length 0
Changing localhost to 127.0.0.1 (to work around the first IPv6 connection
request) changes nothing:
transport = TSocket.TSocket('localhost', 9090) -> transport =
TSocket.TSocket('127.0.0.1', 9090)
tutorial/py]# python PythonClient.py
TSocket read 0 bytes
Trying the other way: starting the python server and connecting with python
client:
tutorial/py]# python PythonServer.py
Starting the server...
Traceback (most recent call last):
File "PythonServer.py", line 95, in <module>
server.serve()
File "/usr/local/lib/python2.7/site-packages/thrift/server/TServer.py", line
74, in serve
self.serverTransport.listen()
File "/usr/local/lib/python2.7/site-packages/thrift/transport/TSocket.py",
line 136, in listen
res0 = self._resolveAddr()
File "/usr/local/lib/python2.7/site-packages/thrift/transport/TSocket.py",
line 31, in _resolveAddr
return socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC,
socket.SOCK_STREAM, 0, socket.AI_PASSIVE | socket.AI_ADDRCONFIG)
TypeError: getaddrinfo() argument 1 must be string or None
Here it seems the problem is that no host has been given, and getaddrinfo fails
on that.
Giving the listen address explicitly:
transport = TSocket.TServerSocket(9090) -> transport =
TSocket.TServerSocket('127.0.0.1',9090)
makes the server start.
Connecting with the client:
tutorial/py]# python PythonClient.py
ping()
1+1=2
InvalidOperation: InvalidOperation(what=4, why='Cannot divide by 0')
15-10=5
Check log: 5
gives the expected result. So the python client can interact with the python
server, but the
Looking at the code, I can't see why these two can't interact. BTW, I've tried
the Ruby client, and it can work with the python server, but not with the
python twisted server.
So I guess python twisted server (and so the client) is incompatible with
everything else. Which seems pretty bad...
Or I'm just on the wrong track somewhere.
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira