You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Marcel Offermans (Commented) (JIRA)" <ji...@apache.org> on 2012/02/03 13:43:54 UTC
[jira] [Commented] (FELIX-3336) Exceptions related to the pipe used
in deployment admin
[ 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