Hi,

We have been using the python thrift lib and I noticed some strange
behaviour: -


If i call: -

transport = TTransport.TBufferedTransport(self.socket)
transport.open()
transport.isOpen()

The isOpen() will return true, even if the connection failed.


I have traced the problem down to class TSocket. The isOpen method works
like this:-

def isOpen(self):
    return self.handle is not None

But if open fails it will not set self.handle back to None: -


def open(self):
    try:
      res0 = self._resolveAddr()
      for res in res0:
        self.handle = socket.socket(res[0], res[1])
        self.handle.settimeout(self._timeout)
        try:
          self.handle.connect(res[4])
        except socket.error, e:
          if res is not res0[-1]:
            continue
          else:
            raise e
        break
    except socket.error, e:
      if self._unix_socket:
        message = 'Could not connect to socket %s' % self._unix_socket
      else:
        message = 'Could not connect to %s:%s' % (self.host, self.port)
      raise TTransportException(type=TTransportException.NOT_OPEN,
                                message=message)



Setting self.handle to None when the connection fails fixes my issue: -

def open(self):
    try:
      res0 = self._resolveAddr()
      for res in res0:
        self.handle = socket.socket(res[0], res[1])
        self.handle.settimeout(self._timeout)
        try:
          self.handle.connect(res[4])
        except socket.error, e:
          if res is not res0[-1]:
            continue
          else:
            self.handle = None
            raise e
        break
    except socket.error, e:
      if self._unix_socket:
        message = 'Could not connect to socket %s' % self._unix_socket
      else:
        message = 'Could not connect to %s:%s' % (self.host, self.port)
      raise TTransportException(type=TTransportException.NOT_OPEN,
                                message=message)


Is this the correct way to fix the issue? Should i raise a jira ticket or
submit a patch or something?

Thanks,
Steve

-- 

*Stephen Briney*

•****

*Software Engineer*

*Xyratex*****

*office:*****

*+44 (0)2392 496542*


*www.xyratex.com* <http://www.xyratex.com/> *Connect with
Xyratex<http://blog.xyratex.com/>
*

-- 


------------------------------
For additional information including the registered office and the treatment of 
Xyratex confidential information please visit www.xyratex.com

------------------------------

Reply via email to