lazy loading build inside queue lock

59 views
Skip to first unread message

Surya Gaddipati

unread,
Jan 18, 2017, 7:53:03 PM1/18/17
to Jenkins Developers





Seems like jenkins lazy loads builds inside a queue lock which in turn freezes jenkins because so many places inside jenkins try to lock queue. 

Is recommended to force lazyload on *all* jobs after jenkins startup to avoid this kind of scenario ? 






hudson.util.XStream2.unmarshal(XStream2.java:114)
com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
hudson.XmlFile.unmarshal(XmlFile.java:158)
hudson.model.Run.reload(Run.java:329)
hudson.model.Run.<init>(Run.java:317)
hudson.model.AbstractBuild.<init>(AbstractBuild.java:175)
hudson.model.Build.<init>(Build.java:103)
hudson.model.FreeStyleBuild.<init>(FreeStyleBuild.java:38)
sun.reflect.GeneratedConstructorAccessor250.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:422)
jenkins.model.lazy.LazyBuildMixIn.loadBuild(LazyBuildMixIn.java:165)
jenkins.model.lazy.LazyBuildMixIn$1.create(LazyBuildMixIn.java:142)
hudson.model.RunMap.retrieve(RunMap.java:223)
hudson.model.RunMap.retrieve(RunMap.java:56)
jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:500)
jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:482)
jenkins.model.lazy.AbstractLazyLoadRunMap.getByNumber(AbstractLazyLoadRunMap.java:380)
jenkins.model.lazy.AbstractLazyLoadRunMap.search(AbstractLazyLoadRunMap.java:345)
jenkins.model.lazy.LazyBuildMixIn$RunMixIn.getPreviousBuild(LazyBuildMixIn.java:362)
hudson.model.AbstractBuild.getPreviousBuild(AbstractBuild.java:196)
hudson.model.AbstractBuild.getPreviousBuild(AbstractBuild.java:105)
hudson.model.Job.getEstimatedDurationCandidates(Job.java:1019)
hudson.model.Job.getEstimatedDuration(Job.java:1033)
hudson.model.queue.MappingWorksheet.<init>(MappingWorksheet.java:334)
hudson.model.queue.MappingWorksheet.<init>(MappingWorksheet.java:317)
hudson.model.Queue.maintain(Queue.java:1525)
hudson.model.Queue$1.call(Queue.java:294)
hudson.model.Queue$1.call(Queue.java:291)
jenkins.util.AtmostOneTaskExecutor$1.call(AtmostOneTaskExecutor.java:101)
jenkins.util.AtmostOneTaskExecutor$1.call(AtmostOneTaskExecutor.java:91)

Oliver Gondža

unread,
Jan 19, 2017, 3:52:40 AM1/19/17
to jenkin...@googlegroups.com
On 2017-01-19 01:53, Surya Gaddipati wrote:
> Seems like jenkins lazy loads builds inside a queue lock which in turn
> freezes jenkins because so many places inside jenkins try to lock queue.
>
> Is recommended to force lazyload on *all* jobs after jenkins startup to
> avoid this kind of scenario ?

That would not be lazy loading then. Though, I agree this can be a pain.
Note that you can at lease prevent constant re-loading using
`jenkins.model.lazy.BuildReference.MODE`
(https://issues.jenkins-ci.org/browse/JENKINS-19400).

--
oliver

Surya Gaddipati

unread,
Jan 19, 2017, 9:22:58 AM1/19/17
to Jenkins Developers
Hi oliver, 

Yes thats the downside of 'preloading' but it would prevent Jenkins from completely freezing at unexpected times . 

There was some talk of writing lock free implementation of queue.  Wondering if  that is still on cards . 

Jesse Glick

unread,
Jan 19, 2017, 11:33:38 AM1/19/17
to Jenkins Dev
On Wed, Jan 18, 2017 at 7:53 PM, Surya Gaddipati
<suryap...@gmail.com> wrote:
> jenkins.model.lazy.LazyBuildMixIn$RunMixIn.getPreviousBuild(LazyBuildMixIn.java:362)
> hudson.model.AbstractBuild.getPreviousBuild(AbstractBuild.java:196)
> hudson.model.AbstractBuild.getPreviousBuild(AbstractBuild.java:105)
> hudson.model.Job.getEstimatedDurationCandidates(Job.java:1019)
> hudson.model.Job.getEstimatedDuration(Job.java:1033)

Probably `getEstimatedDurationCandidates` should limit itself to
builds which have already been loaded anyway.
Reply all
Reply to author
Forward
0 new messages