Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-18501

Fitnesse Plugin - java.net.SocketTimeoutException: Read timed out

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • fitnesse-plugin
    • None

      We get this socket timeout the odd occasion, as you can see we have tried setting the HttpTimeout to a big number but it doesn't seem to help.

      12:59:36 hudson.plugins.fitnesse.FitnesseBuilder:

      {fitnesseTargetPage=PayrollTeam.ModulePayroll.AaTaxArea.NewZealandTax, fitnesseTargetIsSuite=true, fitnesseHost=Private, fitnesseHttpTimeout=2700000, fitnessePortRemote=8886, fitnesseStart=False, fitnessePathToXmlResultsOut=C:\PayGlobal\FitNesse\Results\XESuiteNZTax_Results.xml}

      12:59:36 Connnecting to http://PAYFIT003:8886/PayrollTeam.ModulePayroll.AaTaxArea.NewZealandTax?suite&format=xml&includehtml
      12:59:36 Connected: 200/OK
      13:44:46 java.net.SocketTimeoutException: Read timed out
      13:44:46 at java.net.SocketInputStream.socketRead0(Native Method)
      13:44:46 at java.net.SocketInputStream.read(Unknown Source)
      13:44:46 at java.net.SocketInputStream.read(Unknown Source)
      13:44:46 at java.io.BufferedInputStream.fill(Unknown Source)
      13:44:46 at java.io.BufferedInputStream.read1(Unknown Source)
      13:44:46 at java.io.BufferedInputStream.read(Unknown Source)
      13:44:46 at sun.net.www.http.ChunkedInputStream.readAheadBlocking(Unknown Source)
      13:44:46 at sun.net.www.http.ChunkedInputStream.readAhead(Unknown Source)
      13:44:46 at sun.net.www.http.ChunkedInputStream.read(Unknown Source)
      13:44:46 at java.io.FilterInputStream.read(Unknown Source)
      13:44:46 at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      13:44:46 at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)
      13:44:46 at hudson.plugins.fitnesse.FitnesseExecutor.getHttpBytes(FitnesseExecutor.java:230)
      13:44:46 at hudson.plugins.fitnesse.FitnesseExecutor$1.run(FitnesseExecutor.java:201)
      13:44:46 at java.lang.Thread.run(Unknown Source)

      I've had a quick look at the code and I'm pretty sure this is where it is crashing:

      try {
      log.println("Connnecting to " + pageCmdTarget);
      HttpURLConnection connection = (HttpURLConnection) pageCmdTarget.openConnection();
      connection.setReadTimeout(httpTimeout);
      log.println("Connected: " + connection.getResponseCode() + "/" + connection.getResponseMessage());

      inputStream = connection.getInputStream();
      long recvd = 0, lastLogged = 0;
      byte[] buf = new byte[4096];
      int lastRead;
      while ((lastRead = inputStream.read(buf)) > 0) {
      bucket.write(buf, 0, lastRead);
      timeout.reset();
      recvd += lastRead;
      if (recvd - lastLogged > 1024)

      { log.println(recvd/1024 + "k..."); lastLogged = recvd; }

      }
      } catch (IOException e)

      { // this may be a "premature EOF" caused by e.g. incorrect content-length HTTP header // so it may be non-fatal -- try to recover e.printStackTrace(log); }

      finally {
      if (inputStream != null) {
      try

      { inputStream.close(); }

      catch (Exception e)

      { // swallow }

      }
      }

      I'm not very good with networking code so would someone please be able to look at this for me and see if there is an issue or suggest something environmentally we could do to avoid these timeouts?

      Cheers,
      Sam

          [JENKINS-18501] Fitnesse Plugin - java.net.SocketTimeoutException: Read timed out

          Sam Jessop created issue -

          Sam Jessop added a comment -

          Hey all, me and another developer here have been looking into this further and we see that there is only 1 variable used for the httpTimeout and the tests timeout. This is not good in our case as it may take 45 minutes to run a test (big reports) but it also means it will take 45 minutes for the test to fail if the http fails to connect and timeout.

          Also it doesn't seem to retry to connect if it fails to connect the first time?

          Sam Jessop added a comment - Hey all, me and another developer here have been looking into this further and we see that there is only 1 variable used for the httpTimeout and the tests timeout. This is not good in our case as it may take 45 minutes to run a test (big reports) but it also means it will take 45 minutes for the test to fail if the http fails to connect and timeout. Also it doesn't seem to retry to connect if it fails to connect the first time?
          Heng Wang made changes -
          Status Original: Open [ 1 ] New: In Progress [ 3 ]
          Heng Wang made changes -
          Status Original: In Progress [ 3 ] New: Open [ 1 ]

          Heng Wang added a comment -

          Have you tried to increase the HTTP Timeout (ms) and Test Timeout (ms) in the FitNesse Plugin ?

          I solved this Java Read time out issue by increasing the HTTP Timeout (ms) and Test Timeout (ms), put it long enough to finish all you test suite

          Heng Wang added a comment - Have you tried to increase the HTTP Timeout (ms) and Test Timeout (ms) in the FitNesse Plugin ? I solved this Java Read time out issue by increasing the HTTP Timeout (ms) and Test Timeout (ms), put it long enough to finish all you test suite

          fixed in version 1.7

          Antoine Aumjaud added a comment - fixed in version 1.7
          Antoine Aumjaud made changes -
          Resolution New: Fixed [ 1 ]
          Status Original: Open [ 1 ] New: Resolved [ 5 ]
          Antoine Aumjaud made changes -
          Status Original: Resolved [ 5 ] New: Closed [ 6 ]
          R. Tyler Croy made changes -
          Workflow Original: JNJira [ 149808 ] New: JNJira + In-Review [ 206745 ]

          Hi guys,

          I have to reopen this ticket, because I have the same Problem over and over. In my Project I execute four FitNesse tests (one after another). To get to the bottom of it, I use a different port for every single FitNesse Test. I also use different slim.ports in the FitNesse environment.

          The SocketTimeoutException doesn't appear on every run, but usually on one out of the four. I can tell you that in the case where the exception appears:

          • FitNesse process is running
          • The Server opened the port that was specified
          • There are no FitNesse tests executed

          So the main reason is that the FitNesse tests aren't executed and that causes the SocketTimeoutException. Do you have any idea?

           

          hudson.plugins.fitnesse.FitnesseBuilder: {fitnessePathToRoot=sl_instance/fitnesse.project/FitNesseRoot, additionalFitnesseOptions=-f ./../../launcher/plugin.properties.jenkins, fitnesseTestTimeout=600000, fitnesseJdk=, fitnesseStart=True, fitnesseHttpTimeout=600000, fitnesseTargetIsSuite=true, fitnesseJavaOpts=-Xmx128M, fitnessePathToJar=sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar, fitnesseTargetPage=integration.testBase.AccessTestSuite, fitnessePathToXmlResultsOut=sl_instance/reports/fitnesse/fitnesse-results.xml, fitnessePortLocal=28002, fitnesseJavaWorkingDirectory=sl_instance/fitnesse.project/libs/fitnesse}
          /var/lib/jenkins/jobs/integrationTest/workspace
          Starting new Fitnesse instance...
          [fitnesse] $ java -Xmx128M -jar /var/lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar -d /var/lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project -r FitNesseRoot -p 28002 -f ./../../launcher/plugin.properties.jenkins
          Wait for Fitnesse Server start
          .Bootstrapping FitNesse, the fully integrated standalone wiki and acceptance testing framework.
          root page: fitnesse.wiki.fs.WikiFilePage: FitNesseRoot
          logger: none
          authenticator: fitnesse.authentication.PromiscuousAuthenticator
          page factory: fitnesse.html.template.PageFactory
          page theme: bootstrap
          Starting FitNesse on port: 28002
          
          Fitnesse server started in 1000ms.
          Can't find target file: sl_instance/reports/fitnesse/fitnesse-results.xml with working directory: /var/lib/jenkins/jobs/integrationTest/workspace
          Connnecting to http://localhost:28002/integration.testBase.AccessTestSuite?suite&format=xml&includehtml
          Connected: 200/OK
          java.net.SocketTimeoutException: Read timed out
           at java.net.SocketInputStream.socketRead0(Native Method)
           at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
           at java.net.SocketInputStream.read(SocketInputStream.java:171)
           at java.net.SocketInputStream.read(SocketInputStream.java:141)
           at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
           at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
           at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
           at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552)
           at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609)
           at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696)
           at java.io.FilterInputStream.read(FilterInputStream.java:133)
           at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3375)
           at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3368)
           at hudson.plugins.fitnesse.FitnesseExecutor.getHttpBytes(FitnesseExecutor.java:253)
           at hudson.plugins.fitnesse.FitnesseExecutor$1.run(FitnesseExecutor.java:231)
           at java.lang.Thread.run(Thread.java:745)
          Force close of input stream.
          Xml results saved as UTF-8 to /var/lib/jenkins/jobs/integrationTest/workspace/sl_instance/reports/fitnesse/fitnesse-results.xml
          

          Daniel Eichert added a comment - Hi guys, I have to reopen this ticket, because I have the same Problem over and over. In my Project I execute four FitNesse tests (one after another). To get to the bottom of it, I use a different port for every single FitNesse Test. I also use different slim.ports in the FitNesse environment. The SocketTimeoutException doesn't appear on every run, but usually on one out of the four. I can tell you that in the case where the exception appears: FitNesse process is running The Server opened the port that was specified There are no FitNesse tests executed So the main reason is that the FitNesse tests aren't executed and that causes the SocketTimeoutException. Do you have any idea?   hudson.plugins.fitnesse.FitnesseBuilder: {fitnessePathToRoot=sl_instance/fitnesse.project/FitNesseRoot, additionalFitnesseOptions=-f ./../../launcher/plugin.properties.jenkins, fitnesseTestTimeout=600000, fitnesseJdk=, fitnesseStart=True, fitnesseHttpTimeout=600000, fitnesseTargetIsSuite= true , fitnesseJavaOpts=-Xmx128M, fitnessePathToJar=sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar, fitnesseTargetPage=integration.testBase.AccessTestSuite, fitnessePathToXmlResultsOut=sl_instance/reports/fitnesse/fitnesse-results.xml, fitnessePortLocal=28002, fitnesseJavaWorkingDirectory=sl_instance/fitnesse.project/libs/fitnesse} / var /lib/jenkins/jobs/integrationTest/workspace Starting new Fitnesse instance... [fitnesse] $ java -Xmx128M -jar / var /lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project/libs/fitnesse/fitnesse-standalone.jar -d / var /lib/jenkins/jobs/integrationTest/workspace/sl_instance/fitnesse.project -r FitNesseRoot -p 28002 -f ./../../launcher/plugin.properties.jenkins Wait for Fitnesse Server start .Bootstrapping FitNesse, the fully integrated standalone wiki and acceptance testing framework. root page: fitnesse.wiki.fs.WikiFilePage: FitNesseRoot logger: none authenticator: fitnesse.authentication.PromiscuousAuthenticator page factory: fitnesse.html.template.PageFactory page theme: bootstrap Starting FitNesse on port: 28002 Fitnesse server started in 1000ms. Can't find target file: sl_instance/reports/fitnesse/fitnesse-results.xml with working directory: / var /lib/jenkins/jobs/integrationTest/workspace Connnecting to http: //localhost:28002/integration.testBase.AccessTestSuite?suite&format=xml&includehtml Connected: 200/OK java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:552) at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609) at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696) at java.io.FilterInputStream.read(FilterInputStream.java:133) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3375) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3368) at hudson.plugins.fitnesse.FitnesseExecutor.getHttpBytes(FitnesseExecutor.java:253) at hudson.plugins.fitnesse.FitnesseExecutor$1.run(FitnesseExecutor.java:231) at java.lang. Thread .run( Thread .java:745) Force close of input stream. Xml results saved as UTF-8 to / var /lib/jenkins/jobs/integrationTest/workspace/sl_instance/reports/fitnesse/fitnesse-results.xml
          Daniel Eichert made changes -
          Resolution Original: Fixed [ 1 ]
          Status Original: Closed [ 6 ] New: Reopened [ 4 ]

            Unassigned Unassigned
            samj Sam Jessop
            Votes:
            1 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated: