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

Unbounded searches with BuildUtil.getDownstreamBuild

    XMLWordPrintable

    Details

    • Similar Issues:

      Description

      BuildUtil.getDownstreamBuild does an unbounded search of build records, which is never acceptable due to Jenkins lazy-loading, and particular not in the context of an HTTP handler thread.

      It would be better is to use AbstractBuild.getDownstreamBuilds(AbstractProject), which is efficient, though it only works for project chains which are correctly configured with fingerprints.

      Example:

      "Handling GET /jenkins/org/job/Pipelines/job/org-build/view/Pipelines_View/ from 10.x.x.x : RequestHandlerThread[#2296] View/index.jelly" Id=126293 BLOCKED on hudson.model.RunMap@607d5beb owned by "Handling GET /jenkins/org/job/Pipelines/job/org-build/ from 10.x.x.x : RequestHandlerThread[#2297] View/index.jelly" Id=126471
          at jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java)
          -  blocked on hudson.model.RunMap@607d5beb
          at jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:448)
          at jenkins.model.lazy.AbstractLazyLoadRunMap.getByNumber(AbstractLazyLoadRunMap.java:356)
          at jenkins.model.lazy.AbstractLazyLoadRunMap.search(AbstractLazyLoadRunMap.java:332)
          at jenkins.model.lazy.LazyLoadRunMapEntrySet$1.next(LazyLoadRunMapEntrySet.java:74)
          at jenkins.model.lazy.LazyLoadRunMapEntrySet$1.next(LazyLoadRunMapEntrySet.java:63)
          at java.util.AbstractMap$2$1.next(AbstractMap.java:396)
          at au.com.centrumsystems.hudson.plugin.util.BuildUtil.getDownstreamBuild(BuildUtil.java:66)
      

        Attachments

          Issue Links

            Activity

            Hide
            seanwp Sean McIntyre added a comment -

            Hi there,

            I wanted to chime in and let everyone know we are having a similar issue with our Jenkins setup using the Pipeline plug-in. Each page load in Jenkins was approaching 11s, which is unacceptable for our CI pipeline and causing friction on our team.

            I found that this was the issue by sampling the Java stack every second during a GET request, here are the results in a gist. I saw the common denominator of each sample was the BuildUtil.getDownstreamBuild, and found this ticket.

            We have 7 pipelines in our installation, each having about 6 jobs, and most of those jobs having 1-3K builds in their histories. I purged the histories of these pipelines, reducing their histories to about 300 each (total 60K -> 17K), and Jenkins pageloads are now 2s. I had to do a Jenkins restart after the purges.

            We are running Build Pipeline Plugin 1.5.4 and Jenkins 2.30.

            Thanks!

            Show
            seanwp Sean McIntyre added a comment - Hi there, I wanted to chime in and let everyone know we are having a similar issue with our Jenkins setup using the Pipeline plug-in. Each page load in Jenkins was approaching 11s, which is unacceptable for our CI pipeline and causing friction on our team. I found that this was the issue by sampling the Java stack every second during a GET request, here are the results in a gist . I saw the common denominator of each sample was the BuildUtil.getDownstreamBuild , and found this ticket. We have 7 pipelines in our installation, each having about 6 jobs, and most of those jobs having 1-3K builds in their histories. I purged the histories of these pipelines, reducing their histories to about 300 each (total 60K -> 17K), and Jenkins pageloads are now 2s. I had to do a Jenkins restart after the purges. We are running Build Pipeline Plugin 1.5.4 and Jenkins 2.30. Thanks!
            Hide
            dalvizu Dan Alvizu added a comment -

            Fixed in 1.5.6

            Show
            dalvizu Dan Alvizu added a comment - Fixed in 1.5.6
            Hide
            dalvizu Dan Alvizu added a comment -
            Show
            dalvizu Dan Alvizu added a comment - 1.5.6 included this fix: https://github.com/jenkinsci/build-pipeline-plugin/pull/88
            Hide
            seanwp Sean McIntyre added a comment -

            Great, Dan Alvizu. Our Jenkins page load times fell from 2s to 20ms with the upgrade to 1.5.6.

            Show
            seanwp Sean McIntyre added a comment - Great, Dan Alvizu . Our Jenkins page load times fell from 2s to 20ms with the upgrade to 1.5.6.
            Hide
            dalvizu Dan Alvizu added a comment -

            good to hear, all credit to jpederzolli

            Show
            dalvizu Dan Alvizu added a comment - good to hear, all credit to jpederzolli

              People

              • Assignee:
                schristou Steven Christou
                Reporter:
                ganthore Mark Austin
              • Votes:
                0 Vote for this issue
                Watchers:
                9 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: