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

Improve the performance for NoActivityTimeOutStrategy

    • Icon: Improvement Improvement
    • Resolution: Fixed
    • Icon: Minor Minor
    • build-timeout-plugin
    • None

      @qwazctl commented in JENKINS-23012

      I just noticed this ticket now, so sorry for the late comment. But taking a quick look at the code, the performance issue is quite obvious: in BuildTimeoutWrapper.decorateLogger you are only overriding write(byte) in the wrapper OutputStream - that is hugely inefficient, as most writes occur through write(byte[]) or write(byte[], int, int), and those translate to calling write(byte) one byte at a time. So, override write(byte[], int, int) too (write(byte[]) can be left as is) and I think you'll find a noticeable improvement.

          [JENKINS-26170] Improve the performance for NoActivityTimeOutStrategy

          ikedam added a comment -

          I think LineTransformationOutputStream will help us.

          ikedam added a comment - I think LineTransformationOutputStream will help us.

          ikedam added a comment -

          I tested build durations with a following code in Execute Shell.

          #!bash
          
          for i in $(seq 300); do
            for j in $(seq 65535); do
              echo ${i} ${j}
            done
          done
          
          • Result
            Condition duration
            Without Build-timeout 10 min
            With Build-timeout absolute timeout 10 min
            With Build-timeout no activity timeout (1.14) 15 min
            With Build-timeout no activity timeout with LineTransformationOutputStream 11 min
          • Conclusion
            • LineTransformationOutputStream improves the performance.

          ikedam added a comment - I tested build durations with a following code in Execute Shell. #!bash for i in $(seq 300); do for j in $(seq 65535); do echo ${i} ${j} done done Result Condition duration Without Build-timeout 10 min With Build-timeout absolute timeout 10 min With Build-timeout no activity timeout (1.14) 15 min With Build-timeout no activity timeout with LineTransformationOutputStream 11 min Conclusion LineTransformationOutputStream improves the performance.

          ikedam added a comment -

          ikedam added a comment - https://github.com/jenkinsci/build-timeout-plugin/pull/37

          Code changed in jenkins
          User: ikedam
          Path:
          src/main/java/hudson/plugins/build_timeout/BuildTimeOutStrategy.java
          src/main/java/hudson/plugins/build_timeout/BuildTimeoutWrapper.java
          src/main/java/hudson/plugins/build_timeout/impl/NoActivityTimeOutStrategy.java
          http://jenkins-ci.org/commit/build-timeout-plugin/86e0e98ed00e64f0bedf76a83f7060685e0605a7
          Log:
          [FIXED JENKINS-26170] Improved the performance of NoActivityTimeOutStrategy. Now uses LineTransformationOutputStream.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: ikedam Path: src/main/java/hudson/plugins/build_timeout/BuildTimeOutStrategy.java src/main/java/hudson/plugins/build_timeout/BuildTimeoutWrapper.java src/main/java/hudson/plugins/build_timeout/impl/NoActivityTimeOutStrategy.java http://jenkins-ci.org/commit/build-timeout-plugin/86e0e98ed00e64f0bedf76a83f7060685e0605a7 Log: [FIXED JENKINS-26170] Improved the performance of NoActivityTimeOutStrategy. Now uses LineTransformationOutputStream.

          Code changed in jenkins
          User: ikedam
          Path:
          src/main/java/hudson/plugins/build_timeout/BuildTimeoutWrapper.java
          http://jenkins-ci.org/commit/build-timeout-plugin/404a5f35ba1193d706bdfc06b4a320ca506bb2ce
          Log:
          JENKINS-26170 Also overrides OutputStream#flush.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: ikedam Path: src/main/java/hudson/plugins/build_timeout/BuildTimeoutWrapper.java http://jenkins-ci.org/commit/build-timeout-plugin/404a5f35ba1193d706bdfc06b4a320ca506bb2ce Log: JENKINS-26170 Also overrides OutputStream#flush.

          Code changed in jenkins
          User: ikedam
          Path:
          src/main/java/hudson/plugins/build_timeout/BuildTimeOutStrategy.java
          src/main/java/hudson/plugins/build_timeout/BuildTimeoutWrapper.java
          src/main/java/hudson/plugins/build_timeout/impl/NoActivityTimeOutStrategy.java
          http://jenkins-ci.org/commit/build-timeout-plugin/5b2e78fd1ebd3394e9049e6eb81f6aa1540f11ad
          Log:
          Merge pull request #37 from ikedam/feature/JENKINS-26170_ImproveNoActivityTimeOutStrategy

          JENKINS-26170 improve the peformance of NoActivityTimeOutStrategy

          Compare: https://github.com/jenkinsci/build-timeout-plugin/compare/f307a973674d...5b2e78fd1ebd

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: ikedam Path: src/main/java/hudson/plugins/build_timeout/BuildTimeOutStrategy.java src/main/java/hudson/plugins/build_timeout/BuildTimeoutWrapper.java src/main/java/hudson/plugins/build_timeout/impl/NoActivityTimeOutStrategy.java http://jenkins-ci.org/commit/build-timeout-plugin/5b2e78fd1ebd3394e9049e6eb81f6aa1540f11ad Log: Merge pull request #37 from ikedam/feature/ JENKINS-26170 _ImproveNoActivityTimeOutStrategy JENKINS-26170 improve the peformance of NoActivityTimeOutStrategy Compare: https://github.com/jenkinsci/build-timeout-plugin/compare/f307a973674d...5b2e78fd1ebd

          ikedam added a comment -

          Released in 1.14.1. It will be available in a day.

          ikedam added a comment - Released in 1.14.1. It will be available in a day.

          Daniel Beck added a comment -

          Actually, Update Center generation is broken right now until Kohsuke fixes it, so it may take a bit longer than usual to show up.

          Daniel Beck added a comment - Actually, Update Center generation is broken right now until Kohsuke fixes it, so it may take a bit longer than usual to show up.

            ikedam ikedam
            ikedam ikedam
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: