Comment 13 for bug 567180

Revision history for this message
Leonard Richardson (leonardr) wrote :

I investigated the possibility that the different exceptions we're seeing are caused by python 2.5 versus 2.6. Python 2.6 has a lot of new features for handling socket timeouts, so maybe the exceptions are different.

Well, I was able to get different exceptions, but they're not _that_ different. Here's a client-side socket timeout on write in python 2.5:

  File "/usr/lib/python2.5/httplib.py", line 1108, in send
    return self._ssl.write(stuff)
socket.sslerror: The write operation timed out

Here it is in Python 2.6:

  File "/usr/lib/python2.6/httplib.py", line 755, in send
    self.sock.sendall(str)
  File "/usr/lib/python2.6/ssl.py", line 203, in sendall
    v = self.send(data[count:])
  File "/usr/lib/python2.6/ssl.py", line 94, in <lambda>
    self.send = lambda data, flags=0: SSLSocket.send(self, data, flags)
  File "/usr/lib/python2.6/ssl.py", line 174, in send
    v = self._sslobj.write(data)
ssl.SSLError: The write operation timed out

Note that the 2.5 error occurs on the same line as the one Robert originally reported. Some code underneath that is deciding to raise a generic 'error' instead of a Python socket.sslerror.

I don't know enough about sockets to distinguish between "The write operation timed out" and "Connection timed out". "Connection timed out" might be a sign that the server gave up on you.

You might run this code:

import socket
print socket.getdefaulttimeout()

That's None for me; it may have a value for you. If it's None, I don't see how you can have a client-side timeout since lp:pqm doesn't set a timeout.

At this point I'm running out of ideas. We know that createComment is prone to timeouts, and the problem we're seeing is a a timeout. The only thing that doesn't fit is that the exception looks like a much lower-level exception than I'd expect--as through the server had simply dropped the connection rather than sending a 503 error.