Uploaded image for project: 'Avro'
  1. Avro
  2. AVRO-1069

HttpTransceiver never closes its OutputStream, hinders java reuse of HTTP connections

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.7.1
    • Component/s: java
    • Labels:
      None

      Description

      The class org.apache.avro.ipc.HttpTransceiver opens an OutputStream and never explicitly closes it. That seems like very bad behavior.

      I think you should also be closing the InputStream.

      In particular, Java has built-in the ability to keep HttpURLConnections open, and re-use them. You might think that not closing these streams would help Java in this effort, but actually, the streams are not the raw connections, but wrappers. The javadoc says: "Calling the close() methods on the InputStream or OutputStream of an HttpURLConnection after a request may free network resources associated with this instance but has no effect on any shared persistent connection."

      In other words, when you fail to close these streams, Java doesn't know you are done with the request, so it cannot re-use the connection. You only end up able to re-use the connection when the HttpURLConnection gets garbage-collected.

        Attachments

          Activity

            People

            • Assignee:
              cutting Doug Cutting
              Reporter:
              thomasoa Thomas Andrews
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: