[ 
https://issues.apache.org/jira/browse/FELIX-3336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13199665#comment-13199665
 ] 

Marcel Offermans commented on FELIX-3336:
-----------------------------------------

A solution has been committed, but I'm not quite sure why it works. If you do a 
checkout, and run "mvn clean install" the test succeeds. If you apply this 
patch:

{code}

Index: 
src/main/java/org/apache/felix/deploymentadmin/ExplodingOutputtingInputStream.java
===================================================================
--- 
src/main/java/org/apache/felix/deploymentadmin/ExplodingOutputtingInputStream.java
  (revision 1240137)
+++ 
src/main/java/org/apache/felix/deploymentadmin/ExplodingOutputtingInputStream.java
  (working copy)
@@ -73,7 +73,7 @@
         super(inputStream, output);
         m_contentDir = root;
         m_indexFile = index;
-        m_input = new PipedInputStream(output /*, 8 FELIX-3336: if you provide 
such a small buffer, the error is reproducible (see below) */);
+        m_input = new PipedInputStream(output , 8 /* FELIX-3336: if you 
provide such a small buffer, the error is reproducible (see below) */);
         m_task = new Thread(this, "Apache Felix DeploymentAdmin - 
ExplodingOutputtingInputStream");
         m_task.start();
     }
@@ -129,16 +129,16 @@
             }
         }
         // FELIX-3336: if you include this code, the issue is gone
-        try {
-            byte[] bb = new byte[512];
-            int c = m_input.read(bb);
-            while (c != -1) {
-                c = m_input.read(bb);
-            }
-        }
-        catch (IOException e) {
-            e.printStackTrace();
-        }
+//        try {
+//            byte[] bb = new byte[512];
+//            int c = m_input.read(bb);
+//            while (c != -1) {
+//                c = m_input.read(bb);
+//            }
+//        }
+//        catch (IOException e) {
+//            e.printStackTrace();
+//        }
     }

{code}

And then run the test again, you get:

{code}

$ cat 
target/surefire-reports/org.apache.felix.deploymentadmin.ExplodingOutputtingInputStreamTest.txt
 
-------------------------------------------------------------------------------
Test set: org.apache.felix.deploymentadmin.ExplodingOutputtingInputStreamTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.071 sec <<< 
FAILURE!
testStream(org.apache.felix.deploymentadmin.ExplodingOutputtingInputStreamTest) 
 Time elapsed: 1.057 sec  <<< ERROR!
java.io.IOException: Read end dead
        at 
java.io.PipedInputStream.checkStateForReceive(PipedInputStream.java:246)
        at java.io.PipedInputStream.awaitSpace(PipedInputStream.java:252)
        at java.io.PipedInputStream.receive(PipedInputStream.java:215)
        at java.io.PipedOutputStream.write(PipedOutputStream.java:132)
        at 
org.apache.felix.deploymentadmin.OutputtingInputStream.read(OutputtingInputStream.java:58)
        at 
org.apache.felix.deploymentadmin.ExplodingOutputtingInputStreamTest.testStream(ExplodingOutputtingInputStreamTest.java:47)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[...]

{code}

For some weird reason the read blocks and finally generates an exception 
because the pipe has been closed. I have no clue why the read blocks though, 
and why reading extra bytes from an underlying stream (m_input) that should 
have already been read completely (this ZipInputStream reads everything it 
should) unblocks the read. Admittedly, this is not the easiest piece of code to 
read, but I can't find a fundamental flaw in the approach. Maybe someone else 
can. :)
                
> Exceptions related to the pipe used in deployment admin
> -------------------------------------------------------
>
>                 Key: FELIX-3336
>                 URL: https://issues.apache.org/jira/browse/FELIX-3336
>             Project: Felix
>          Issue Type: Bug
>          Components: Deployment Admin
>            Reporter: Marcel Offermans
>
> Sporadically getting "Pipe closed" exceptions. Not reproducible yet, but 
> seemingly related to a line containing "input.close()" in the 
> ExplodingOutputtingInputStream. Needs investigation.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to