Branch: refs/heads/pull-1596
  Home:   https://github.com/jenkinsci/jenkins
  Commit: 92147c3597308bc05e6448ccc41409fcc7c05fd7
      
https://github.com/jenkinsci/jenkins/commit/92147c3597308bc05e6448ccc41409fcc7c05fd7
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-24 (Tue, 24 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/Functions.java
    M core/src/main/java/hudson/model/AbstractCIBase.java
    M core/src/main/java/hudson/model/Computer.java
    M core/src/main/java/hudson/model/Executor.java
    M core/src/main/java/hudson/model/Hudson.java
    M core/src/main/java/hudson/model/Node.java
    M core/src/main/java/hudson/model/Queue.java
    M core/src/main/java/hudson/model/ResourceController.java
    M core/src/main/java/hudson/slaves/AbstractCloudSlave.java
    M core/src/main/java/hudson/slaves/ComputerRetentionWork.java
    M core/src/main/java/hudson/slaves/NodeProvisioner.java
    M core/src/main/java/hudson/slaves/RetentionStrategy.java
    M core/src/main/java/hudson/slaves/SlaveComputer.java
    M core/src/main/java/jenkins/model/Jenkins.java
    A core/src/main/java/jenkins/model/Nodes.java
    M core/src/main/java/jenkins/util/AtmostOneTaskExecutor.java
    M core/src/main/resources/hudson/model/Messages.properties
    M core/src/main/resources/lib/hudson/executors.jelly
    M core/src/main/resources/lib/layout/layout.jelly

  Log Message:
  -----------
  [FIXED JENKINS-27565] Refactor the Queue and Nodes to use a consistent 
locking strategy

The test system I set up to verify resolution of customer(s)' issues driving 
this change, required
additional changes in order to fully resolve the issues at hand. As a result I 
am bundling these
changes:

- Moves nodes to being store in separate config files outside of the main 
config file (improves performance) [FIXED JENKINS-27562]
- Makes the Jenkins is loading screen not block on the extensions loading lock 
[FIXED JENKINS-27563]
- Removes race condition rendering the list of executors [FIXED JENKINS-27564] 
[FIXED JENKINS-15355]
- Tidy up the locks that were causing deadlocks with the once retention 
strategy in durable tasks [FIXED JENKINS-27476]
- Remove any requirement from Jenkins Core to lock on the Queue when rendering 
the Jenkins UI [FIXED-JENKINS-27566]


  Commit: ebd0bde9fd065f75fc2deb5c2c0ee8c2fce79a63
      
https://github.com/jenkinsci/jenkins/commit/ebd0bde9fd065f75fc2deb5c2c0ee8c2fce79a63
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-24 (Tue, 24 Mar 2015)

  Changed paths:
    M core/src/main/java/jenkins/model/Nodes.java

  Log Message:
  -----------
  Ooops, forgot that the setting of nodes needs to happen while the Queue lock 
is held and the computer list needs updating afterwards


  Commit: 027b8a9b37a461e1b7c411af37ff6c976f7d4f8d
      
https://github.com/jenkinsci/jenkins/commit/027b8a9b37a461e1b7c411af37ff6c976f7d4f8d
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-24 (Tue, 24 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java
    M test/src/test/java/jenkins/model/JenkinsReloadConfigurationTest.java

  Log Message:
  -----------
  fix failing tests (hopefully)


  Commit: 2da5fb94a099bd020e58b5d572cfdf7fabe40b68
      
https://github.com/jenkinsci/jenkins/commit/2da5fb94a099bd020e58b5d572cfdf7fabe40b68
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-24 (Tue, 24 Mar 2015)

  Changed paths:
    M test/src/test/java/jenkins/model/JenkinsReloadConfigurationTest.java

  Log Message:
  -----------
  Aha! the latest failing test should now be ok


  Commit: 9cd00e40dd5ea7f4bfb7ca11b5383d13d0afd8eb
      
https://github.com/jenkinsci/jenkins/commit/9cd00e40dd5ea7f4bfb7ca11b5383d13d0afd8eb
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/Functions.java

  Log Message:
  -----------
  added `@since` tag as requested by @jglick


  Commit: b341589b5d68c07542f1516207dc1db8eb741c7e
      
https://github.com/jenkinsci/jenkins/commit/b341589b5d68c07542f1516207dc1db8eb741c7e
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/jenkins/model/Jenkins.java

  Log Message:
  -----------
  If the number of executors changes, then we need to update the computer list


  Commit: 1fe73753916646c5f7e45ea6c8eb611cc4f1e5da
      
https://github.com/jenkinsci/jenkins/commit/1fe73753916646c5f7e45ea6c8eb611cc4f1e5da
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Computer.java
    M core/src/main/java/hudson/model/Executor.java

  Log Message:
  -----------
  Document the terminatedBy methods


  Commit: 5a1999ea3035c16160e1961ffc6a61166bc6cae4
      
https://github.com/jenkinsci/jenkins/commit/5a1999ea3035c16160e1961ffc6a61166bc6cae4
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java

  Log Message:
  -----------
  Let's be extra safe with unlocking the lock...

(yes `} finally { updateSnapshot(); } } finally {` looks ugly but it reduces 
the amount of indentation changes)


  Commit: b4bb963e217a6ef0e88f6d8975e8ae4ebfe63c63
      
https://github.com/jenkinsci/jenkins/commit/b4bb963e217a6ef0e88f6d8975e8ae4ebfe63c63
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java

  Log Message:
  -----------
  Move SaveableListener notification outside of the lock


  Commit: 1844f0d93571bf175cb519cec862850b74d5da92
      
https://github.com/jenkinsci/jenkins/commit/1844f0d93571bf175cb519cec862850b74d5da92
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java

  Log Message:
  -----------
  Remove dead code while we are at it


  Commit: 215186e0f1aed1992a549ab35ab15c2cdb1f2948
      
https://github.com/jenkinsci/jenkins/commit/215186e0f1aed1992a549ab35ab15c2cdb1f2948
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java

  Log Message:
  -----------
  Grammar


  Commit: 951b07789c407aa95b5f59836fc55b3c54480429
      
https://github.com/jenkinsci/jenkins/commit/951b07789c407aa95b5f59836fc55b3c54480429
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/slaves/NodeProvisioner.java

  Log Message:
  -----------
  Document locking logic


  Commit: 639f06307650de93efce9e93b09cdccc92877bb2
      
https://github.com/jenkinsci/jenkins/commit/639f06307650de93efce9e93b09cdccc92877bb2
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/jenkins/model/Nodes.java

  Log Message:
  -----------
  Add license header


  Commit: f42e7f80ca47b2aef090660be26a035fb429b98d
      
https://github.com/jenkinsci/jenkins/commit/f42e7f80ca47b2aef090660be26a035fb429b98d
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/jenkins/model/Nodes.java

  Log Message:
  -----------
  Let's keep this private for now


  Commit: f30444c819ae7ac143a8a155a7417b3e2d4ab4ec
      
https://github.com/jenkinsci/jenkins/commit/f30444c819ae7ac143a8a155a7417b3e2d4ab4ec
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/jenkins/model/Nodes.java

  Log Message:
  -----------
  Clarify the cases where we hand-roll in the optimized subset of a save() and 
how config files are maintained


  Commit: dae0a492b55bba3b5247dcb657e38e75a27d71f5
      
https://github.com/jenkinsci/jenkins/commit/dae0a492b55bba3b5247dcb657e38e75a27d71f5
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/resources/lib/hudson/executors.jelly

  Log Message:
  -----------
  Minimise diff to reduce merge conflicts with #1610


  Commit: 2d64d160e9ade2ac16c75276b9ad7fac3f0c8758
      
https://github.com/jenkinsci/jenkins/commit/2d64d160e9ade2ac16c75276b9ad7fac3f0c8758
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Computer.java

  Log Message:
  -----------
  Missing @since and @Restricted


  Commit: c67eddf27bc8ed18be04905a15e0d7a05a20eee6
      
https://github.com/jenkinsci/jenkins/commit/c67eddf27bc8ed18be04905a15e0d7a05a20eee6
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java

  Log Message:
  -----------
  Arg! damn you copy and paste


  Commit: df160d63e2526a84c35d920f7fb36cbe95816396
      
https://github.com/jenkinsci/jenkins/commit/df160d63e2526a84c35d920f7fb36cbe95816396
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Executor.java

  Log Message:
  -----------
  Use the GuardedBy import that the Jenkins core uses by convention

- We will never mind that this is probably the wrong import to use as Jenkins 
core is consistently using the
  wrong one (If anyone asks, for a `javax` import to be correct, it should have 
a JSR that has passed through voting
  and not have a JSR that is still subject to change... OTOH one could argue 
that if the JSR 305 should ever
  become revived from its current dormant state *and* it is decided to include 
in the JRE *then* the packages
  would get moved out of `javax` and into `java` so they are not in final form 
anyway... but that pre-supposes
  that the process of standardization does not modify the annotations and by 
virtue of being in `javax`
  there will be some special case handling by some classloaders which is why 
depending on the JSR305 versions
  is, in my view, a bad plan... anyway this is moot... Jenkins core is going 
with JSR305 as it currently stands
  so we call all go down together!)


  Commit: 6a1ed2807ad245f520983469dd7014af3c82adad
      
https://github.com/jenkinsci/jenkins/commit/6a1ed2807ad245f520983469dd7014af3c82adad
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Computer.java

  Log Message:
  -----------
  Add some javadoc tags and record the time of the termination request


  Commit: 0150209edecdd3be6a0d451b6d42c7273ffff763
      
https://github.com/jenkinsci/jenkins/commit/0150209edecdd3be6a0d451b6d42c7273ffff763
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M test/src/test/groovy/hudson/model/AbstractProjectTest.groovy
    M test/src/test/java/hudson/model/ExecutorTest.java
    M test/src/test/java/hudson/model/GetEnvironmentOutsideBuildTest.java
    M test/src/test/java/hudson/model/QueueTest.java

  Log Message:
  -----------
  Remove `jenkins.setNodes(jenkins.getNodes())` style hacks to force the master 
number of executors to be updated


  Commit: 91527df490552327e2beb3e2c54bbfaa76589084
      
https://github.com/jenkinsci/jenkins/commit/91527df490552327e2beb3e2c54bbfaa76589084
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Executor.java

  Log Message:
  -----------
  fix guarded by values


  Commit: cf9f3cfbed7200b17e49941800902e56532f5d47
      
https://github.com/jenkinsci/jenkins/commit/cf9f3cfbed7200b17e49941800902e56532f5d47
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/slaves/NodeProvisioner.java

  Log Message:
  -----------
  More fun with GuardedBy


  Commit: 89835c85acff5832631bb1dfd8e4003a8d444c02
      
https://github.com/jenkinsci/jenkins/commit/89835c85acff5832631bb1dfd8e4003a8d444c02
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/slaves/RetentionStrategy.java

  Log Message:
  -----------
  Even more fun with GuardedBy


  Commit: 8264236a07e047c202a4681ff325f0aa9ca7b632
      
https://github.com/jenkinsci/jenkins/commit/8264236a07e047c202a4681ff325f0aa9ca7b632
  Author: Stephen Connolly <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/slaves/CloudRetentionStrategy.java
    M core/src/main/java/hudson/slaves/CloudSlaveRetentionStrategy.java
    M core/src/main/java/hudson/slaves/RetentionStrategy.java
    M core/src/main/java/hudson/slaves/SimpleScheduledRetentionStrategy.java

  Log Message:
  -----------
  Update the retention strategies... the JSR 305 annotations do not seem to be 
spec'd to apply to child methods also... bold poorly spec'd annotations


  Commit: 5c8d5601717884e7841005e630012019a8d46b57
      
https://github.com/jenkinsci/jenkins/commit/5c8d5601717884e7841005e630012019a8d46b57
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/ResourceController.java

  Log Message:
  -----------
  These data structures need not use Queue lock.

The synchronization in original code was needed to control the mutation of 
#inProgress and #inUse.
In particular, one thread that's blocking in the beginning of execute()
can get notified when another thread leaves the execute() method.

ResourceList is used as immutable in this context, and so is Resource.


  Commit: bdbe9c00ed16a9f689ecc1dafdab7ee70c7cf06d
      
https://github.com/jenkinsci/jenkins/commit/bdbe9c00ed16a9f689ecc1dafdab7ee70c7cf06d
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Executor.java
    M core/src/main/java/hudson/model/Queue.java
    M core/src/main/java/hudson/slaves/ComputerRetentionWork.java

  Log Message:
  -----------
  Signature change to defer the queue task work


  Commit: ccf97ae13faf4bb886cad6920d1762a6f01fe826
      
https://github.com/jenkinsci/jenkins/commit/ccf97ae13faf4bb886cad6920d1762a6f01fe826
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java

  Log Message:
  -----------
  Return ListenableFuture to enable chaining.

If some additional computation (such as firing off other listeners) need
to happen after some computation with queue, then this would be handy.


  Commit: 44e936c3aff3a6c76f3d4b2e3669028828ad8124
      
https://github.com/jenkinsci/jenkins/commit/44e936c3aff3a6c76f3d4b2e3669028828ad8124
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/slaves/NodeProvisioner.java

  Log Message:
  -----------
  NodeProvisioner.update() runs asynchronously

so the provisioningLock needs to be held inside the async execution, not at the 
point of the submission.

suggestReviewNow() doesn't have to call update() from another thread either.


  Commit: 42f5984dc0d6dab12342ca5c1e56ea81f45da53e
      
https://github.com/jenkinsci/jenkins/commit/42f5984dc0d6dab12342ca5c1e56ea81f45da53e
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/AbstractCIBase.java

  Log Message:
  -----------
  getComputerMap() should now move into the asynchronous code.

And ComputerListener callback can happen afterward.


  Commit: aabe66b6462ad9dba44c872db39a685d9b0cfb6a
      
https://github.com/jenkinsci/jenkins/commit/aabe66b6462ad9dba44c872db39a685d9b0cfb6a
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/jenkins/model/Nodes.java

  Log Message:
  -----------
  All queue mutation in the Nodes class appears synchronous.

And I see no way around it, mainly because of the following pattern:

1. getNodes() to obtain a list
2. do some stuff with list
3. setNodes()


  Commit: 012ca55028c93f93d13dd29ba21b160257c6756a
      
https://github.com/jenkinsci/jenkins/commit/012ca55028c93f93d13dd29ba21b160257c6756a
  Author: Kohsuke Kawaguchi <[email protected]>
  Date:   2015-03-25 (Wed, 25 Mar 2015)

  Changed paths:
    M core/src/main/java/hudson/model/Queue.java
    M core/src/main/java/jenkins/model/Nodes.java
    M test/src/test/java/hudson/model/ExecutorTest.java

  Log Message:
  -----------
  We need to wait for the side-effect of asynchronous executions to complete.

Or else if somebody wants to get Computer for a newly added Node
immediately afterward, there won't be one. This resulted in a couple of
test failures.

Exposing this from Queue so that test code can use it.


Compare: 
https://github.com/jenkinsci/jenkins/compare/92147c359730^...012ca55028c9

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Commits" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to