Update on this ticket. It turned out the problem had nothing to do with jetty. The issue is that the HttpClient continues to consume the stream even after the inputstream from the httpclient has been closed. Varun Thacker, noticed the odd looking read following the close in the stack trace. This is the ChunkedInputStream close behavior, which is to consume the entire stream when close is called.
I'll post a patch shortly that closes the HttpResponse rather then the inputstream. The patch also catches all exceptions that occur while writing to the client and closes the underlying tuple stream.
The effect of these two changes should be that when the client closes a TupleStream:
1) The server writing the tuples will get a broken pipe exception and close it's underlying TupleStream.
2) This will cause a chain reaction of broken pipes and stream closings that will eventually shut down all streams and stop the /export handler with a broken pipe exception.
This patch has not yet been tested.