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

        

Reply via email to