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

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

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.7.1
    • java
    • 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

        1. AVRO-1069.patch
          1 kB
          Doug Cutting

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: