Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-1062

Problems with python tutorials

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.9
    • 0.9.1
    • Python - Library, Tutorial
    • None
    • Thrift trunk (svn rev:1071191), python 2.7, FreeBSD/amd64 8-stable

    Description

      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.

      Attachments

        Activity

          People

            roger Roger Meier
            bra@fsn.hu Attila Nagy
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: