[ 
https://issues.jenkins-ci.org/browse/JENKINS-12037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=159346#comment-159346
 ] 

Richard Mortimer commented on JENKINS-12037:
--------------------------------------------

Problem found. Unfortunately it is deep in the emulator (qemu) startup code. 
The following code registers the emulator instance with the adb server.

{code}
qemu-setup.c:
  sprintf(tmp,"0012host:emulator:%d",base_port+1);
  socket_send(s, tmp, 18+4);
{code}

This registers the emulator with the adb server but it makes two assumptions:
# that the user port is one less than the adb port for the emulator. Comments 
in the code also suggest that the user port was once assumed to be an even 
number. The server takes the adb port number supplied and subtracts one to get 
the user port. It then tries to connect to the user port to confirm that it 
really is an emulator.
# only 4 characters of the adb port number is sent to the adb server (the +4 in 
socket_send). Thus if the port number is greater than 9999 or less than 1000 
then the wrong port number is sent.

I haven't searched the Android bug database for this yet but will search/report 
there later today.

However that does not make things work for a-e-p because we will need to 
support older emulators.

I tested a fix that uses the Jenkins port allocator to allocate 7000 for user 
port, 7001 for emulator adb port and then 8000 for the adb server. With that 
maven happily worked using {{-Dandroid.device=emulator}}.

{code}
[INFO] Found 1 devices connected with the Android Debug Bridge
[INFO] android.device parameter set to emulator
[INFO] checking 
device=emulator-6000_hudson_en-GB_160_WVGA_android-7_unknown_sdk, port=8000, 
name=hudson_en-GB_160_WVGA_android-7, isEmulator=true
[INFO] Emulator emulator-6000_hudson_en-GB_160_WVGA_android-7_unknown_sdk found.
{code}

Obviously to provide a proper fix we need to do some magic with the port 
allocator plugin. Assuming that it is acceptable that we require a newer port 
allocator plugin for a-e-p then I'll look to extend that to help us. Failing 
that we can likely make the existing allocator work with a bit of messing 
around.
                
> CLI - I/O error in channel Chunked connection/Unexpected termination of the 
> channel - still occurring in Jenkins 1.449
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: JENKINS-12037
>                 URL: https://issues.jenkins-ci.org/browse/JENKINS-12037
>             Project: Jenkins
>          Issue Type: Bug
>          Components: cli
>         Environment: * Running on SLES9 Linux server with 4 CPUs and plenty 
> of diskspace.
> * Tomcat 7.0.22
> * JDK 1.6.0_14
> * Only ONE Master configuration - no slaves are configured
> * 3 Executors - (one less than the max number of CPUs) 
>            Reporter: mark streit
>         Attachments: Tomcat7_Jenkins1449_logs.zip
>
>
> We reported an issue some time back that was also listed as fixed in Jenkins 
> 1.441:
> Log:
> [FIXED JENKINS-11130] SEVERE: I/O error in channel Chunked connection when 
> using jenkins-cli.jar
> Perhaps another bug should NOT be submitted so I have added the following 
> comments below the line to the original defect 11130 comments section in case 
> it can be reviewed/re-opened.
> We did NOT try to make any adjustments to the Tomcat configuration:
> Tomcat Connector connectionUploadTimeout
> but we are also now seeing the same problem with Winstone when at this same 
> 1.441 level.  We did revert to the 1.438 version of the CLI (leaving the WAR 
> at 1.441 running in Winstone) and that is serving asthe current workaround.
> ================================================================================================
> We have downloaded and installed the LATEST 1.441 release that lists the fix 
> for this problem. Currently we were running 1.438 on Winstone only (since 
> with Tomcat 6 or 7, we had experienced the error HOWEVER yet under Winstone, 
> it worked OK so that was our workaround - while running 1.438).
> Now with Jenkins 1.441 - we are getting the ERROR again and NOW WITH BOTH 
> Winstone and the Tomcat configurations). We have left the Jenkins 1.441 WAR 
> file in place running on Winstone, and reverted the CLI jar file back to the 
> 1.438 version for now and that appears to work again with Winstone.
> Checked Manifest of CLI jar downloaded with the 1.441 WAR installation:
> Manifest-Version: 1.0
> Archiver-Version: Plexus Archiver
> Created-By: Apache Maven
> Built-By: kohsuke
> Build-Jdk: 1.6.0_26
> Main-Class: hudson.cli.CLI
> Jenkins-CLI-Version: 1.441
> Under Tomcat 7, we get this stacktrace:
> Started by command line
> [workspace] $ /bin/bash -xe 
> /opt/apache-tomcat-7.0.22_jenkins/temp/hudson32817888834817830.sh
> + /opt/Sun/jdk1.6.0_14/bin/java -jar /opt/Sun/jdk1.6.0_14/lib/jenkins-cli.jar 
> -s http://11.22.33.44:8082/jenkins/ build XYZ_Project-SharedLibs -s -p 
> SVN_PATH=trunk
> Dec 5, 2011 12:59:11 PM hudson.remoting.Channel$ReaderThread run
> SEVERE: I/O error in channel Chunked connection to 
> http://11.22.33.44:8082/jenkins/cli
> java.io.IOException: Unexpected termination of the channel
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1115)
> Caused by: java.io.EOFException
> at 
> java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1109)
> Exception in thread "main" hudson.remoting.RequestAbortedException: 
> hudson.remoting.RequestAbortedException: java.io.IOException: Unexpected 
> termination of the channel
> at hudson.remoting.Request.call(Request.java:149)
> at hudson.remoting.Channel.call(Channel.java:681)
> at 
> hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:158)
> at $Proxy2.main(Unknown Source)
> at hudson.cli.CLI.execute(CLI.java:200)
> at hudson.cli.CLI._main(CLI.java:330)
> at hudson.cli.CLI.main(CLI.java:245)
> Caused by: hudson.remoting.RequestAbortedException: java.io.IOException: 
> Unexpected termination of the channel
> at hudson.remoting.Request.abort(Request.java:273)
> at hudson.remoting.Channel.terminate(Channel.java:732)
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1139)
> Caused by: java.io.IOException: Unexpected termination of the channel
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1115)
> Caused by: java.io.EOFException
> at 
> java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1109)
> Build step 'Execute shell' marked build as failure
> Notifying upstream projects of job completion
> Finished: FAILURE
> Under Winstone, we get this stacktrace - it's somewhat different:
> Started by command line
> [workspace] $ /bin/bash -xe /tmp/hudson10791816374444704.sh
> + /opt/Sun/jdk1.6.0_14/bin/java -jar /opt/Sun/jdk1.6.0_14/lib/jenkins-cli.jar 
> -s http://11.22.33.44:8082/jenkins/ build XYZ_Project-SharedLibs -s -p 
> SVN_PATH=trunk
> Dec 5, 2011 1:18:22 PM hudson.remoting.Channel$ReaderThread run
> SEVERE: I/O error in channel Chunked connection to 
> http://11.22.33.44:8082/jenkins/cli
> java.io.IOException: Premature EOF
> at 
> sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:538)
>  
> (http://www.http.ChunkedInputStream.readAheadBlocking%28ChunkedInputStream.java:538%29)
> at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582) 
> (http://www.http.ChunkedInputStream.readAhead%28ChunkedInputStream.java:582%29)
> at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669) 
> (http://www.http.ChunkedInputStream.read%28ChunkedInputStream.java:669%29)
> at java.io.FilterInputStream.read(FilterInputStream.java:116)
> at 
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2504)
>  
> (http://www.protocol.http.HttpURLConnection$HttpInputStream.read%28HttpURLConnection.java:2504%29)
> at 
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2499)
>  
> (http://www.protocol.http.HttpURLConnection$HttpInputStream.read%28HttpURLConnection.java:2499%29)
> at 
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2488)
>  
> (http://www.protocol.http.HttpURLConnection$HttpInputStream.read%28HttpURLConnection.java:2488%29)
> at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2249)
> at 
> java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2542)
> at 
> java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1109)
> Exception in thread "main" hudson.remoting.RequestAbortedException: 
> hudson.remoting.RequestAbortedException: java.io.IOException: Premature EOF
> at hudson.remoting.Request.call(Request.java:149)
> at hudson.remoting.Channel.call(Channel.java:681)
> at 
> hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:158)
> at $Proxy2.main(Unknown Source)
> at hudson.cli.CLI.execute(CLI.java:200)
> at hudson.cli.CLI._main(CLI.java:330)
> at hudson.cli.CLI.main(CLI.java:245)
> Caused by: hudson.remoting.RequestAbortedException: java.io.IOException: 
> Premature EOF
> at hudson.remoting.Request.abort(Request.java:273)
> at hudson.remoting.Channel.terminate(Channel.java:732)
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1139)
> Caused by: java.io.IOException: Premature EOF
> at 
> sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:538)
>  
> (http://www.http.ChunkedInputStream.readAheadBlocking%28ChunkedInputStream.java:538%29)
> at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582) 
> (http://www.http.ChunkedInputStream.readAhead%28ChunkedInputStream.java:582%29)
> at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669) 
> (http://www.http.ChunkedInputStream.read%28ChunkedInputStream.java:669%29)
> at java.io.FilterInputStream.read(FilterInputStream.java:116)
> at 
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2504)
>  
> (http://www.protocol.http.HttpURLConnection$HttpInputStream.read%28HttpURLConnection.java:2504%29)
> at 
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2499)
>  
> (http://www.protocol.http.HttpURLConnection$HttpInputStream.read%28HttpURLConnection.java:2499%29)
> at 
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2488)
>  
> (http://www.protocol.http.HttpURLConnection$HttpInputStream.read%28HttpURLConnection.java:2488%29)
> at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2249)
> at 
> java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2542)
> at 
> java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)
> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
> at hudson.remoting.Channel$ReaderThread.run(Channel.java:1109)
> Build step 'Execute shell' marked build as failure
> Notifying upstream projects of job completion
> Finished: FAILURE

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

        

Reply via email to