Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-42668

An mp4 attachment causes an error in the logs despite playing fine in the browser

    XMLWordPrintable

Details

    Description

      NOTE: This bug report is for JIRA Server. Using JIRA Cloud? See the corresponding bug report.

      Summary

      This is a logging bug. There seems to be no functional problem from the UI side.

      When clicking on an mp4 attachment, it will play the video in the web browser with no indication of any problem, but JIRA logs a ClientAbortException.

      • This doesn't seem to happen for small files that are less than 1 MB (rought estimate)
      • For files that are a couple MB in size, it happens upon first request, but not after. I believe this is because of caching
      • I've been able to always reproduce this with larger files of great than a couple hundred MB

      Environment

      Reproducible on the browsers below:

      • Chrome 42.0.2311.135 (64-bit)
      • Safari 7.1 (9537.85.10.17.1)

      The error does not happen when streaming the video on Firefox 37.0.2.

      Steps to Reproduce

      1. Upload a .mp4 video file to an issue ticket (e.g. SampleVideo_360x240_5mb.mp4).
        • Use larger files for best results
      2. Click on the video, which will cause it to start playing in your web browser

      Expected Results

      No errors are written to the logs.

      Actual Results

      The errors below will be written to the JIRA logs:
      catalina.out or atlassian-jira.log:

      2015-03-27 16:02:54,535 http-bio-8080-exec-5 ERROR admin 962x252x1 1g0nbm1 0:0:0:0:0:0:0:1 /secure/attachment/23200/test-video
      .mp4 [jira.web.servlet.ViewAttachmentServlet] Error serving file for path /23200/test-video.mp4: com.atlassian.jira.exception.DataAccessException: ClientAbortException:  java.net.SocketException: Broken pipe
      com.atlassian.jira.issue.attachment.AttachmentReadException: com.atlassian.jira.exception.DataAccessException: ClientAbortException: java.net.SocketException: Broken pipe
              at com.atlassian.jira.issue.attachment.DefaultAttachmentStore$3.call(DefaultAttachmentStore.java:197)
              at com.atlassian.util.concurrent.Executors$DefaultSubmitter$CallableRunner.run(Executors.java:62)
              at com.atlassian.util.concurrent.LimitedExecutor$Runner.run(LimitedExecutor.java:93)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
              at java.lang.Thread.run(Thread.java:745)
      Caused by: com.atlassian.jira.exception.DataAccessException: ClientAbortException:  java.net.SocketException: Broken pipe
              at com.atlassian.jira.issue.managers.DefaultAttachmentManager$2.get(DefaultAttachmentManager.java:572)
              at com.atlassian.jira.issue.managers.DefaultAttachmentManager$2.get(DefaultAttachmentManager.java:562)
              at com.atlassian.util.concurrent.Functions$ToGoogleAdapter.apply(Functions.java:131)
              at com.atlassian.jira.issue.attachment.DefaultAttachmentStore$3.call(DefaultAttachmentStore.java:193)
              ... 5 more
      Caused by: ClientAbortException:  java.net.SocketException: Broken pipe
              at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:407)
              at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
              at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
              at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:432)
              at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:420)
              at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)
              at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1026)
              at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
              at com.atlassian.jira.web.servlet.AbstractViewFileServlet$1.withInputStream(AbstractViewFileServlet.java:105)
              at com.atlassian.jira.web.servlet.AbstractViewFileServlet$1.withInputStream(AbstractViewFileServlet.java:95)
              at com.atlassian.jira.issue.managers.DefaultAttachmentManager$2.get(DefaultAttachmentManager.java:568)
              ... 8 more
      Caused by: java.net.SocketException: Broken pipe
              at java.net.SocketOutputStream.socketWrite0(Native Method)
              at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
              at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
              at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)
              at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
              at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
              at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:240)
              at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:84)
              at org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:192)
              at org.apache.coyote.Response.doWrite(Response.java:499)
              at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:402)
              ... 18 more
      

      localhost-<DATE>.log:

      May 06, 2015 10:11:36 AM org.apache.catalina.core.StandardWrapperValve invoke
      SEVERE: Servlet.service() for servlet [viewattachment] in context with path [/jira641] threw exception [com.atlassian.jira.issue.attachment.AttachmentReadException: com.atlassian.jira.exception.DataAccessException: ClientAbortException:  java.net.SocketException: Broken pipe] with root cause
      java.net.SocketException: Broken pipe
      	at java.net.SocketOutputStream.socketWrite0(Native Method)
      	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
      	at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
      	at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)
      	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
      	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
      	at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:240)
      	at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:84)
      	at org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:192)
      	at org.apache.coyote.Response.doWrite(Response.java:499)
      	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:402)
      	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
      	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
      	at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:432)
      	at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:420)
      	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)
      	at net.bull.javamelody.FilterServletOutputStream.write(FilterServletOutputStream.java:83)
      	at net.bull.javamelody.CounterResponseStream.write(CounterResponseStream.java:82)
      	at com.atlassian.gzipfilter.RoutableServletOutputStream.write(RoutableServletOutputStream.java:118)
      	at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1026)
      	at org.apache.commons.io.IOUtils.copy(IOUtils.java:999)
      	at com.atlassian.jira.web.servlet.AbstractViewFileServlet$1.withInputStream(AbstractViewFileServlet.java:108)
      	at com.atlassian.jira.web.servlet.AbstractViewFileServlet$1.withInputStream(AbstractViewFileServlet.java:98)
      	at com.atlassian.jira.issue.managers.DefaultAttachmentManager$8.get(DefaultAttachmentManager.java:874)
      	at com.atlassian.jira.issue.managers.DefaultAttachmentManager$8.get(DefaultAttachmentManager.java:868)
      	at com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$2.get(DefaultFileSystemAttachmentStore.java:145)
      	at com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$2.get(DefaultFileSystemAttachmentStore.java:141)
      	at com.atlassian.jira.issue.attachment.store.DefaultFileSystemAttachmentStore$3.call(DefaultFileSystemAttachmentStore.java:178)
      	at com.atlassian.util.concurrent.Executors$DefaultSubmitter$CallableRunner.run(Executors.java:62)
      	at com.atlassian.util.concurrent.LimitedExecutor$Runner.run(LimitedExecutor.java:93)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      	at java.lang.Thread.run(Thread.java:724)
      

      Notes

      Instances using APR (Apache Portable Runtime) will have a slightly different stack trace. The problem is still reproducible in those environments though.

      Attachments

        1. SampleVideo_360x240_5mb.mp4
          5.01 MB
        2. small.mp4
          375 kB

        Issue Links

          Activity

            People

              Unassigned Unassigned
              dchan David Chan
              Votes:
              100 Vote for this issue
              Watchers:
              99 Start watching this issue

              Dates

                Created:
                Updated: