Edgewall Software
Modify

Opened 16 years ago

Closed 16 years ago

#7271 closed defect (duplicate)

ERROR: (32, 'Broken pipe') when zipped diff is interrupted (fcgi)

Reported by: adeason2@… Owned by:
Priority: normal Milestone:
Component: web frontend Version:
Severity: normal Keywords:
Cc: Branch:
Release Notes:
API Changes:
Internal Changes:

Description

I'm seeing this error occaisionally, which as I understand it, is harmless:

Trac[LaserLine:__init__] ERROR: (32, 'Broken pipe')
Traceback (most recent call last):
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/main.py", line 415, in dispatch_request
    dispatcher.dispatch(req)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/main.py", line 246, in dispatch
    resp = chosen_handler.process_request(req)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/versioncontrol/web_ui/changeset.py", line 249, in process_request
    self._render_zip(req, filename, repos, diff_args)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/versioncontrol/web_ui/changeset.py", line 613, in _render_zip
    req.write(buf.getvalue())
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/api.py", line 461, in write
    self._write(data)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/_fcgi.py", line 1226, in write
    req.stdout.write(data)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/_fcgi.py", line 328, in write
    self._write(data)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/_fcgi.py", line 312, in _write
    self._conn.writeRecord(rec)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/_fcgi.py", line 706, in writeRecord
    rec.write(self._sock)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/_fcgi.py", line 543, in write
    self._sendall(sock, header)
  File "/afs/acm.uiuc.edu/project/trac/lib/python2.4/site-packages/trac/web/_fcgi.py", line 520, in _sendall
    sent = sock.send(data)
error: (32, 'Broken pipe')

This occurs when someone selects a zipped diff between two changesets, and closes the connection before the download completes.

There appear to be a few tickets related to the fcgi backend and the 'Broken pipe' error; perhaps the try/except block for this should be moved to somewhere where it catches the general case, if possible? There already is code to ignore EPIPE, but this specific case doesn't appear to execute in its try block.

Attachments (0)

Change History (3)

comment:1 by osimons, 16 years ago

I seem to remember discussing the case for other frontends when I got it fixed for mod_python in ticket 3819. With mod_python, we use the mod_python send_file() method directly, and are able to catch errors on execution. With other frontends such as FCGI and mod_wsgi Trac only sends away the file and leave it to frontend to handle - and won't really know the why or how for any errors that may occur.

Leaving it open for now in case others have more knowledge about it, but I suspect this is a 'cantfix' situation from the Trac side.

comment:2 by adeason2@…, 16 years ago

So… why not just put

try:
  foo
except socket.error, e:
  if e[0] != errno.EPIPE:
    raise

around any of the calls in _fcgi.py in the backtrace I gave above? The FCGI spec says you should at the very least ignore EPIPE, and code like this is already found in at least one other place in _fcgi.py. You don't need to know the why or how of the error… you always ignore EPIPE.

comment:3 by osimons, 16 years ago

Resolution: duplicate
Status: newclosed

Found it. It is a duplicate of #3868. Closing, and I'll add a note on that ticket about the suggested patch as well.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The ticket will remain with no owner.
The resolution will be deleted. Next status will be 'reopened'.
to The owner will be changed from (none) to the specified user.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.