Skip to content

Commit

Permalink
Merged revisions 11754-11755,11763-11766,11770,11773-11777,11791-1179…
Browse files Browse the repository at this point in the history
…7,11828-11829,11831-11839,11841-11843,11850,11854,11994,12774,12778-12793,12820-12822,12831-12841,12854-12855,12860-12882,12896-12905,12914-12920,12938-12941,12950,13045-13046,13048,13063-13064,13066,13072-13076,13111,13122-13147,13150,13153-13158,13487-13488,13851-13852,13854-13856,13859,13866-13867,13869,13872-13876,13878-13879,13883-13885,13887-13890,13896-13919 via svnmerge from

https://www.dev.java.net/svn/hudson/branches/multiple-computer-per-node

................
  r11754 | kohsuke | 2008-08-25 17:59:14 -0700 (Mon, 25 Aug 2008) | 3 lines
  
  Adding EphemeralNode for non-persisted dynamically-allocated expandable/shrinkable slave pool.
  
  Tweaked the serialization of Hudson.slaves accordingly.
................
  r11755 | kohsuke | 2008-08-25 18:10:42 -0700 (Mon, 25 Aug 2008) | 1 line
  
  making a small improvements
................
  r11763 | kohsuke | 2008-08-26 13:57:25 -0700 (Tue, 26 Aug 2008) | 1 line
  
  adding more convenience methods
................
  r11764 | kohsuke | 2008-08-26 14:24:20 -0700 (Tue, 26 Aug 2008) | 1 line
  
  ported mask capability from the TFS plugin to the core.
................
  r11765 | kohsuke | 2008-08-26 14:26:25 -0700 (Tue, 26 Aug 2008) | 1 line
  
  making it non-final to allow for subclassing
................
  r11766 | kohsuke | 2008-08-26 14:35:20 -0700 (Tue, 26 Aug 2008) | 1 line
  
  test case for NodeList
................
  r11770 | kohsuke | 2008-08-26 15:15:21 -0700 (Tue, 26 Aug 2008) | 3 lines
  
  Wrote a simple tool that monitors a file system change (in a poor way) and triggers a build.
................
  r11773 | kohsuke | 2008-08-26 17:20:30 -0700 (Tue, 26 Aug 2008) | 1 line
  
  made more structured
................
  r11774 | kohsuke | 2008-08-26 17:47:41 -0700 (Tue, 26 Aug 2008) | 1 line
  
  indentation fix
................
  r11775 | kohsuke | 2008-08-26 17:48:22 -0700 (Tue, 26 Aug 2008) | 1 line
  
  remove the use of a deprecated feature.
................
  r11776 | kohsuke | 2008-08-26 17:51:54 -0700 (Tue, 26 Aug 2008) | 1 line
  
  renamed to 'ALL' to be consistent with recent use of DescriptorList
................
  r11777 | kohsuke | 2008-08-26 18:04:17 -0700 (Tue, 26 Aug 2008) | 1 line
  
  adding NodeFactory list and its configuration mechanism
................
  r11791 | kohsuke | 2008-08-27 09:43:38 -0700 (Wed, 27 Aug 2008) | 1 line
  
  picked up the latest jelly with Iterable support in <j:forEach>
................
  r11792 | kohsuke | 2008-08-27 09:44:08 -0700 (Wed, 27 Aug 2008) | 1 line
  
  Iterable support added in  commons-jelly 1.1-hudson-20080826
................
  r11793 | kohsuke | 2008-08-27 10:15:14 -0700 (Wed, 27 Aug 2008) | 2 lines
  
  - added name to NodeFactory for binding NodeFactory to URL tree.
  - NodeFactory should be access controlled
................
  r11794 | kohsuke | 2008-08-27 10:41:11 -0700 (Wed, 27 Aug 2008) | 1 line
  
  added a method to add one Node at a time
................
  r11795 | kohsuke | 2008-08-27 10:41:37 -0700 (Wed, 27 Aug 2008) | 1 line
  
  added permission constatnt
................
  r11796 | kohsuke | 2008-08-27 10:42:13 -0700 (Wed, 27 Aug 2008) | 1 line
  
  allowing the launch method to throw an exception.
................
  r11797 | kohsuke | 2008-08-27 10:44:13 -0700 (Wed, 27 Aug 2008) | 1 line
  
  improving the handling
................
  r11828 | kohsuke | 2008-08-29 11:07:16 -0700 (Fri, 29 Aug 2008) | 1 line
  
  added executor config to the sidebar.
................
  r11829 | kohsuke | 2008-08-29 11:16:11 -0700 (Fri, 29 Aug 2008) | 1 line
  
  "it" should be assigned to NodeFactory
................
  r11831 | kohsuke | 2008-08-29 11:44:41 -0700 (Fri, 29 Aug 2008) | 1 line
  
  formatting changes
................
  r11832 | kohsuke | 2008-08-29 11:59:21 -0700 (Fri, 29 Aug 2008) | 1 line
  
  added a script to create a flashing image from any picture
................
  r11833 | kohsuke | 2008-08-29 12:07:56 -0700 (Fri, 29 Aug 2008) | 1 line
  
  doc improvement.
................
  r11834 | kohsuke | 2008-08-29 13:37:59 -0700 (Fri, 29 Aug 2008) | 1 line
  
  added new images to indicate that a slave is launching
................
  r11835 | kohsuke | 2008-08-29 13:43:41 -0700 (Fri, 29 Aug 2008) | 1 line
  
  indicate a launching slave accordingly.
................
  r11836 | kohsuke | 2008-08-29 14:02:28 -0700 (Fri, 29 Aug 2008) | 1 line
  
  added a method to remove a Node.
................
  r11837 | kohsuke | 2008-08-29 14:02:38 -0700 (Fri, 29 Aug 2008) | 1 line
  
  disconnect
................
  r11838 | kohsuke | 2008-08-29 14:03:22 -0700 (Fri, 29 Aug 2008) | 1 line
  
  formatting changes
................
  r11839 | kohsuke | 2008-08-29 14:14:04 -0700 (Fri, 29 Aug 2008) | 1 line
  
  allowing subclasses.
................
  r11841 | kohsuke | 2008-08-29 14:28:29 -0700 (Fri, 29 Aug 2008) | 1 line
  
  constructor should be the first in the definition.
................
  r11842 | kohsuke | 2008-08-29 14:31:01 -0700 (Fri, 29 Aug 2008) | 1 line
  
  doc improvement.
................
  r11843 | kohsuke | 2008-08-29 14:32:48 -0700 (Fri, 29 Aug 2008) | 1 line
  
  fixed a problem of using partially constructed object during launch(), because the setNode() method is called from the Computer constructor.
................
  r11850 | kohsuke | 2008-08-29 14:50:36 -0700 (Fri, 29 Aug 2008) | 1 line
  
  serialize NodeFactory first so that references to them from NodeList will become references in XML.
................
  r11854 | kohsuke | 2008-08-29 14:56:56 -0700 (Fri, 29 Aug 2008) | 1 line
  
  cleaning up a bit.
................
  r11994 | kohsuke | 2008-09-03 14:42:11 -0700 (Wed, 03 Sep 2008) | 21 lines
  
  Fixed ArrayIndexOutOfBoundsException during replace(), when the title contains a '$' literal.
  
  The typical stack trace looks like:
  
  Caused by: java.lang.ArrayIndexOutOfBoundsException: 32
          at hudson.MarkupText$SubText.start(MarkupText.java:95)
          at hudson.MarkupText$SubText.group(MarkupText.java:131)
          at hudson.MarkupText$SubText.replace(MarkupText.java:154)
          at hudson.MarkupText$SubText.surroundWith(MarkupText.java:83)
          at 
  hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:37)
          at 
  hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:117)
          ... 148 more
  
  Vijayan Jayaraman and I found this problem while we were looking at the server log of Hudson for OpenJFX.
  
  Adding a unit test to verify this behavior, too.  
................
  r12774 | kohsuke | 2008-10-27 15:03:36 -0700 (Mon, 27 Oct 2008) | 3 lines
  
  preparing for heterogenousness in Node, so that different Node can be configured with different UIs, much like how different Jobs can be configured.
  
  Creating a slave works also like creating a new job.
................
  r12778 | kohsuke | 2008-10-27 15:06:51 -0700 (Mon, 27 Oct 2008) | 1 line
  
  We need to be able to create an emtpy Slave initially, so we have to do with the check in the form field validation.
................
  r12779 | kohsuke | 2008-10-27 15:48:04 -0700 (Mon, 27 Oct 2008) | 1 line
  
  making the new slave page a two-step process
................
  r12780 | kohsuke | 2008-10-27 15:48:24 -0700 (Mon, 27 Oct 2008) | 1 line
  
  fixed a compilation problem
................
  r12781 | kohsuke | 2008-10-27 15:53:30 -0700 (Mon, 27 Oct 2008) | 1 line
  
  bug fixes
................
  r12782 | kohsuke | 2008-10-27 15:58:20 -0700 (Mon, 27 Oct 2008) | 1 line
  
  bug fixes
................
  r12783 | kohsuke | 2008-10-27 16:08:56 -0700 (Mon, 27 Oct 2008) | 1 line
  
  making the configuration page work for slaves
................
  r12784 | kohsuke | 2008-10-27 16:35:17 -0700 (Mon, 27 Oct 2008) | 1 line
  
  added new-computer.svg
................
  r12785 | kohsuke | 2008-10-27 16:37:26 -0700 (Mon, 27 Oct 2008) | 1 line
  
  hooking up the config/create pages to the UI
................
  r12786 | kohsuke | 2008-10-27 16:44:40 -0700 (Mon, 27 Oct 2008) | 1 line
  
  fixed a copy method.
................
  r12787 | kohsuke | 2008-10-27 16:47:33 -0700 (Mon, 27 Oct 2008) | 1 line
  
  code was broken when a slave was renamed
................
  r12788 | kohsuke | 2008-10-27 16:58:04 -0700 (Mon, 27 Oct 2008) | 1 line
  
  moving out the commonality into a new tag
................
  r12789 | kohsuke | 2008-10-27 17:01:21 -0700 (Mon, 27 Oct 2008) | 1 line
  
  consistent term usage
................
  r12790 | kohsuke | 2008-10-27 17:03:19 -0700 (Mon, 27 Oct 2008) | 1 line
  
  retiring the configureExecutors. Slave configuration is now moved to individual slave page
................
  r12791 | kohsuke | 2008-10-27 17:10:32 -0700 (Mon, 27 Oct 2008) | 1 line
  
  retired configureExecutors.jelly and completed moved its contents to somewhere else
................
  r12792 | kohsuke | 2008-10-27 17:21:53 -0700 (Mon, 27 Oct 2008) | 1 line
  
  bug fix. request handling of "/descriptor/FQCN/..." was broken.
................
  r12793 | kohsuke | 2008-10-27 17:27:08 -0700 (Mon, 27 Oct 2008) | 1 line
  
  NodeFactory -> Cloud to encourage consistent term usage between the code and the UI.
................
  r12820 | kohsuke | 2008-10-29 10:58:20 -0700 (Wed, 29 Oct 2008) | 1 line
  
  formatting fix
................
  r12821 | kohsuke | 2008-10-29 11:17:49 -0700 (Wed, 29 Oct 2008) | 1 line
  
  added classes for handling a secret and prevent accidental exposure of a secret in the persisted form
................
  r12822 | kohsuke | 2008-10-29 11:32:39 -0700 (Wed, 29 Oct 2008) | 1 line
  
  added a base64 validator
................
  r12831 | kohsuke | 2008-10-29 15:58:45 -0700 (Wed, 29 Oct 2008) | 1 line
  
  secret key needs to be persisted outside config.xml (and it is, already!)
................
  r12832 | kohsuke | 2008-10-29 16:06:28 -0700 (Wed, 29 Oct 2008) | 1 line
  
  started working on Amazon EC2 plugin
................
  r12833 | kohsuke | 2008-10-29 16:09:20 -0700 (Wed, 29 Oct 2008) | 1 line
  
  brought the same enhancement as in <textbox />
................
  r12834 | kohsuke | 2008-10-29 16:15:05 -0700 (Wed, 29 Oct 2008) | 1 line
  
  copy over the onclick handler from the original button element
................
  r12835 | kohsuke | 2008-10-29 17:01:04 -0700 (Wed, 29 Oct 2008) | 1 line
  
  allow OK messages to be sent with some mark up.
................
  r12836 | kohsuke | 2008-10-29 17:06:52 -0700 (Wed, 29 Oct 2008) | 1 line
  
  added connection testing. This pattern needs to be generalized since it happens often
................
  r12837 | kohsuke | 2008-10-29 17:13:11 -0700 (Wed, 29 Oct 2008) | 1 line
  
  this is little better
................
  r12838 | kohsuke | 2008-10-29 17:17:44 -0700 (Wed, 29 Oct 2008) | 1 line
  
  added spinner
................
  r12839 | kohsuke | 2008-10-29 17:31:54 -0700 (Wed, 29 Oct 2008) | 1 line
  
  restructuring the validation button support in a form that can be readily moved to the core.
................
  r12840 | kohsuke | 2008-10-29 18:01:41 -0700 (Wed, 29 Oct 2008) | 1 line
  
  added <f:validateButton/> for multi-field server-side validation
................
  r12841 | kohsuke | 2008-10-29 18:03:12 -0700 (Wed, 29 Oct 2008) | 1 line
  
  logic moved to <f:validateButton/> in the core.
................
  r12854 | kohsuke | 2008-10-30 13:32:58 -0700 (Thu, 30 Oct 2008) | 1 line
  
  @QueryParameter.value won't be necessary any more
................
  r12855 | kohsuke | 2008-10-30 13:42:58 -0700 (Thu, 30 Oct 2008) | 1 line
  
  need a strongly-typed constructor.
................
  r12860 | kohsuke | 2008-10-30 15:24:18 -0700 (Thu, 30 Oct 2008) | 1 line
  
  adding more reflection support, which in turn we use in taglibs to raise the level of abstraction.
................
  r12861 | kohsuke | 2008-10-30 15:33:22 -0700 (Thu, 30 Oct 2008) | 1 line
  
  added a tag to create databinding to a<select> element from an enum property
................
  r12862 | kohsuke | 2008-10-30 15:37:44 -0700 (Thu, 30 Oct 2008) | 1 line
  
  adding a smarter bi-directional binding through <f:repeatable field="..."/>
................
  r12863 | kohsuke | 2008-10-30 15:47:48 -0700 (Thu, 30 Oct 2008) | 1 line
  
  making progress with the EC2 support
................
  r12864 | kohsuke | 2008-10-30 16:12:34 -0700 (Thu, 30 Oct 2008) | 1 line
  
  added form field validation for AMI ID
................
  r12865 | kohsuke | 2008-10-30 16:15:44 -0700 (Thu, 30 Oct 2008) | 1 line
  
  added simpler version
................
  r12866 | kohsuke | 2008-10-30 16:17:15 -0700 (Thu, 30 Oct 2008) | 1 line
  
  doc improvement
................
  r12867 | kohsuke | 2008-10-30 16:17:19 -0700 (Thu, 30 Oct 2008) | 1 line
  
  simplified a bit
................
  r12868 | kohsuke | 2008-10-30 16:40:25 -0700 (Thu, 30 Oct 2008) | 1 line
  
  doc improvement
................
  r12869 | kohsuke | 2008-10-30 17:00:57 -0700 (Thu, 30 Oct 2008) | 1 line
  
  adding the provisioning of the new slave
................
  r12870 | kohsuke | 2008-10-30 17:07:27 -0700 (Thu, 30 Oct 2008) | 1 line
  
  /** {@inheritdoc} */ is the default behavior for javadoc, so there's no point in making that explicit.
................
  r12871 | kohsuke | 2008-10-30 17:11:04 -0700 (Thu, 30 Oct 2008) | 1 line
  
  doc bug fix
................
  r12872 | kohsuke | 2008-10-30 17:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
  
  simplified a bit
................
  r12873 | kohsuke | 2008-10-30 17:19:06 -0700 (Thu, 30 Oct 2008) | 1 line
  
  added RetentionStrategy for EC2 instances
................
  r12874 | kohsuke | 2008-10-30 17:21:17 -0700 (Thu, 30 Oct 2008) | 1 line
  
  allowing subclasses to override the disconnect behavior.
................
  r12875 | kohsuke | 2008-10-30 18:02:35 -0700 (Thu, 30 Oct 2008) | 1 line
  
  added termination
................
  r12876 | kohsuke | 2008-10-30 18:05:30 -0700 (Thu, 30 Oct 2008) | 1 line
  
  forgot to rename when NodeFactory was renamed to Cloud
................
  r12877 | kohsuke | 2008-10-30 18:06:08 -0700 (Thu, 30 Oct 2008) | 1 line
  
  using the console icon
................
  r12878 | kohsuke | 2008-10-30 18:17:20 -0700 (Thu, 30 Oct 2008) | 1 line
  
  adding UI to remove a slave.
................
  r12879 | kohsuke | 2008-10-30 18:48:57 -0700 (Thu, 30 Oct 2008) | 1 line
  
  commons-discovery now needed in stapler
................
  r12880 | kohsuke | 2008-10-30 18:50:27 -0700 (Thu, 30 Oct 2008) | 1 line
  
  needs to use a newer version of stapler
................
  r12881 | kohsuke | 2008-10-30 18:51:02 -0700 (Thu, 30 Oct 2008) | 1 line
  
  Bye bye CVS
................
  r12882 | kohsuke | 2008-10-30 18:51:43 -0700 (Thu, 30 Oct 2008) | 1 line
  
  Bye bye CVS
................
  r12896 | kohsuke | 2008-10-31 14:52:07 -0700 (Fri, 31 Oct 2008) | 1 line
  
  fixed the ordering between field and the mighty get(String) method.
................
  r12897 | kohsuke | 2008-10-31 15:08:41 -0700 (Fri, 31 Oct 2008) | 1 line
  
  fixed test compilation problems
................
  r12898 | kohsuke | 2008-10-31 15:11:25 -0700 (Fri, 31 Oct 2008) | 1 line
  
  marking this as a model object since it's always bound to URL.
................
  r12899 | kohsuke | 2008-10-31 15:13:42 -0700 (Fri, 31 Oct 2008) | 1 line
  
  adding UI hook up to manually provision a new node
................
  r12900 | kohsuke | 2008-10-31 15:14:00 -0700 (Fri, 31 Oct 2008) | 1 line
  
  after merging the trunk the version number is different
................
  r12901 | kohsuke | 2008-10-31 15:21:54 -0700 (Fri, 31 Oct 2008) | 1 line
  
  adding UI hook up for provisioning a new slave
................
  r12902 | kohsuke | 2008-10-31 15:45:10 -0700 (Fri, 31 Oct 2008) | 1 line
  
  adding a hook to decorate ComputerLauncher.
................
  r12903 | kohsuke | 2008-10-31 15:48:21 -0700 (Fri, 31 Oct 2008) | 1 line
  
  added filtering support
................
  r12904 | kohsuke | 2008-10-31 15:52:45 -0700 (Fri, 31 Oct 2008) | 1 line
  
  added view
................
  r12905 | kohsuke | 2008-10-31 15:53:49 -0700 (Fri, 31 Oct 2008) | 1 line
  
  doc improvement
................
  r12914 | kohsuke | 2008-11-01 17:45:57 -0700 (Sat, 01 Nov 2008) | 1 line
  
  adding code for connecting with SSH
................
  r12915 | kohsuke | 2008-11-01 17:49:28 -0700 (Sat, 01 Nov 2008) | 1 line
  
  working on launchers
................
  r12916 | kohsuke | 2008-11-01 18:33:12 -0700 (Sat, 01 Nov 2008) | 1 line
  
  added a method to fully read a stream
................
  r12917 | kohsuke | 2008-11-01 18:33:45 -0700 (Sat, 01 Nov 2008) | 1 line
  
  bumped up stapler
................
  r12918 | kohsuke | 2008-11-01 18:39:41 -0700 (Sat, 01 Nov 2008) | 1 line
  
  doc improvement.
................
  r12919 | kohsuke | 2008-11-01 18:45:24 -0700 (Sat, 01 Nov 2008) | 1 line
  
  added a launcher
................
  r12920 | kohsuke | 2008-11-01 18:55:02 -0700 (Sat, 01 Nov 2008) | 1 line
  
  implementing the actual ComputerLauncher
................
  r12938 | kohsuke | 2008-11-02 08:56:05 -0800 (Sun, 02 Nov 2008) | 1 line
  
  support the field notation
................
  r12939 | kohsuke | 2008-11-02 09:20:21 -0800 (Sun, 02 Nov 2008) | 1 line
  
  added the mechanism to execute the init script
................
  r12940 | kohsuke | 2008-11-02 09:21:38 -0800 (Sun, 02 Nov 2008) | 1 line
  
  simplification
................
  r12941 | kohsuke | 2008-11-02 09:36:21 -0800 (Sun, 02 Nov 2008) | 1 line
  
  adding key handling
................
  r12950 | kohsuke | 2008-11-03 11:00:58 -0800 (Mon, 03 Nov 2008) | 1 line
  
  formatting changes
................
  r13045 | kohsuke | 2008-11-06 15:24:32 -0800 (Thu, 06 Nov 2008) | 1 line
  
  adding time series datatype for retaining load average statistics in memory
................
  r13046 | kohsuke | 2008-11-06 15:59:02 -0800 (Thu, 06 Nov 2008) | 1 line
  
  added a convenience method.
................
  r13048 | kohsuke | 2008-11-06 16:21:54 -0800 (Thu, 06 Nov 2008) | 2 lines
  
  - started monitoring # of executor statistics.
  - exposed label to the remote API
................
  r13063 | kohsuke | 2008-11-07 13:05:15 -0800 (Fri, 07 Nov 2008) | 1 line
  
  added a convenience method.
................
  r13064 | kohsuke | 2008-11-07 13:11:08 -0800 (Fri, 07 Nov 2008) | 1 line
  
  monitor the length of the queue too
................
  r13066 | kohsuke | 2008-11-07 14:15:56 -0800 (Fri, 07 Nov 2008) | 1 line
  
  moved the stats to its own class.
................
  r13072 | kohsuke | 2008-11-07 15:40:29 -0800 (Fri, 07 Nov 2008) | 1 line
  
  adding provisioning logic based on load statistics
................
  r13073 | kohsuke | 2008-11-07 15:46:00 -0800 (Fri, 07 Nov 2008) | 1 line
  
  for effective testing, we need sub-sec precision
................
  r13074 | kohsuke | 2008-11-07 16:24:44 -0800 (Fri, 07 Nov 2008) | 1 line
  
  fixed a lie.
................
  r13075 | kohsuke | 2008-11-07 16:25:12 -0800 (Fri, 07 Nov 2008) | 1 line
  
  bug fix
................
  r13076 | kohsuke | 2008-11-07 16:30:55 -0800 (Fri, 07 Nov 2008) | 1 line
  
  avoid using deprecated methods
................
  r13111 | kohsuke | 2008-11-09 11:54:23 -0800 (Sun, 09 Nov 2008) | 1 line
  
  added the Future<?> return parameter to Computer.launch(). To do this w/o breaking compatibility, renamed launch to connect.
................
  r13122 | kohsuke | 2008-11-10 14:38:03 -0800 (Mon, 10 Nov 2008) | 1 line
  
  allow programmatic update of the assigned label
................
  r13123 | kohsuke | 2008-11-10 14:38:40 -0800 (Mon, 10 Nov 2008) | 1 line
  
  Iterator not needed because CopyOnWriteArrayList doesn't support removal via iterator.
................
  r13124 | kohsuke | 2008-11-10 14:39:24 -0800 (Mon, 10 Nov 2008) | 1 line
  
  added another Builder for tests
................
  r13125 | kohsuke | 2008-11-10 14:39:48 -0800 (Mon, 10 Nov 2008) | 1 line
  
  simplified a bit. This TestEnvironment stuff needs some clearer story.
................
  r13126 | kohsuke | 2008-11-10 14:46:40 -0800 (Mon, 10 Nov 2008) | 1 line
  
  IDEA complains about this.
................
  r13127 | kohsuke | 2008-11-10 14:51:53 -0800 (Mon, 10 Nov 2008) | 1 line
  
  improved the error diagnostics by displaying why a provisioned node failed to launch
................
  r13128 | kohsuke | 2008-11-10 14:52:12 -0800 (Mon, 10 Nov 2008) | 1 line
  
  Started a test case for NodeProvisioner
................
  r13129 | kohsuke | 2008-11-10 14:52:27 -0800 (Mon, 10 Nov 2008) | 1 line
  
  formatting changes
................
  r13130 | kohsuke | 2008-11-10 15:16:02 -0800 (Mon, 10 Nov 2008) | 1 line
  
  report the failure as a failure.
................
  r13131 | kohsuke | 2008-11-10 16:34:23 -0800 (Mon, 10 Nov 2008) | 1 line
  
  adding a parameter to the connect method to support joining to the pending launch activity.
................
  r13132 | kohsuke | 2008-11-10 16:38:31 -0800 (Mon, 10 Nov 2008) | 1 line
  
  making members public so that it can be accessed from other classes (DummyCloudImpl was the first to do this)
................
  r13133 | kohsuke | 2008-11-10 16:38:58 -0800 (Mon, 10 Nov 2008) | 1 line
  
  split the cloud implementation to a separate class to allow reuse.
................
  r13134 | kohsuke | 2008-11-10 16:56:27 -0800 (Mon, 10 Nov 2008) | 1 line
  
  assign unique names to support multiple jobs
................
  r13135 | kohsuke | 2008-11-10 17:11:31 -0800 (Mon, 10 Nov 2008) | 1 line
  
  avoid unnecessary interruption
................
  r13136 | kohsuke | 2008-11-10 17:11:41 -0800 (Mon, 10 Nov 2008) | 1 line
  
  adding another test case
................
  r13137 | kohsuke | 2008-11-10 17:16:28 -0800 (Mon, 10 Nov 2008) | 1 line
  
  cleaned up a test case
................
  r13138 | kohsuke | 2008-11-10 17:36:52 -0800 (Mon, 10 Nov 2008) | 1 line
  
  since the setNode method is called on every Computer just by adding a new node, don't force a new launch attempt.
................
  r13139 | kohsuke | 2008-11-10 17:37:38 -0800 (Mon, 10 Nov 2008) | 1 line
  
  perform orderly shutdown by giving computers enough time to disconnect.
................
  r13140 | kohsuke | 2008-11-10 17:38:08 -0800 (Mon, 10 Nov 2008) | 3 lines
  
  return Future for synchronization.
  
  This breaks binary compatibility, but I checked none of the plugins in Hudson SVN uses this, so I hope this is OK.
................
  r13141 | kohsuke | 2008-11-10 17:38:46 -0800 (Mon, 10 Nov 2008) | 1 line
  
  improved diagnostics
................
  r13142 | kohsuke | 2008-11-10 17:39:55 -0800 (Mon, 10 Nov 2008) | 1 line
  
  removed compiler warning
................
  r13143 | kohsuke | 2008-11-10 18:02:56 -0800 (Mon, 10 Nov 2008) | 1 line
  
  hide the rounding related problem from Cloud by passing int instead of float.
................
  r13144 | kohsuke | 2008-11-10 18:10:10 -0800 (Mon, 10 Nov 2008) | 1 line
  
  bug fix
................
  r13145 | kohsuke | 2008-11-10 18:11:51 -0800 (Mon, 10 Nov 2008) | 1 line
  
  formatting changes
................
  r13146 | kohsuke | 2008-11-10 18:15:08 -0800 (Mon, 10 Nov 2008) | 1 line
  
  moved the slave launch code to HudsonTestCase for reuse
................
  r13147 | kohsuke | 2008-11-10 18:20:19 -0800 (Mon, 10 Nov 2008) | 1 line
  
  adding another test case
................
  r13150 | kohsuke | 2008-11-11 07:28:53 -0800 (Tue, 11 Nov 2008) | 1 line
  
  bug fix
................
  r13153 | kohsuke | 2008-11-11 14:04:21 -0800 (Tue, 11 Nov 2008) | 1 line
  
  cutting down the test size to 5 to increase the test speed
................
  r13154 | kohsuke | 2008-11-11 14:04:37 -0800 (Tue, 11 Nov 2008) | 1 line
  
  improved debuggability
................
  r13155 | kohsuke | 2008-11-11 14:10:04 -0800 (Tue, 11 Nov 2008) | 1 line
  
  added another convenience method
................
  r13156 | kohsuke | 2008-11-11 14:10:21 -0800 (Tue, 11 Nov 2008) | 1 line
  
  further reduce the test turn around time
................
  r13157 | kohsuke | 2008-11-11 14:22:03 -0800 (Tue, 11 Nov 2008) | 1 line
  
  doc improvement and clean up
................
  r13158 | kohsuke | 2008-11-11 14:22:28 -0800 (Tue, 11 Nov 2008) | 1 line
  
  added a new metho
................
  r13487 | kohsuke | 2008-12-09 17:17:30 -0800 (Tue, 09 Dec 2008) | 1 line
  
  SlaveTemplate needs to be able to computer # of executors.
................
  r13488 | kohsuke | 2008-12-09 17:18:05 -0800 (Tue, 09 Dec 2008) | 1 line
  
  fixed a compilation problem with the latest head of the branch
................
  r13851 | kohsuke | 2008-12-24 13:40:43 -0800 (Wed, 24 Dec 2008) | 82 lines
  
  fixed a dead lock reported by Jesse.
  
  Found one Java-level deadlock:
  =============================
  "Executor #0 for master":
     waiting to lock monitor 0x09409bac (object 0x87474ca0, a hudson.util.CopyOnWriteMap$Hash),
     which is held by "main"
  "main":
     waiting to lock monitor 0x09409b48 (object 0x87474d48, a hudson.model.Hudson$MasterComputer),
     which is held by "Executor #0 for master"
  
  Java stack information for the threads listed above:
  ===================================================
  "Executor #0 for master":
  	at hudson.util.CopyOnWriteMap.remove(CopyOnWriteMap.java:78)
  	- waiting to lock <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
  	at hudson.model.Hudson.removeComputer(Hudson.java:717)
  	at hudson.model.Computer.removeExecutor(Computer.java:433)
  	- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
  	at hudson.model.Executor.run(Executor.java:65)
  	- locked <0x87474d48> (a hudson.model.Hudson$MasterComputer)
  "main":
  	at hudson.model.Computer.setNumExecutors(Computer.java:338)
  	- waiting to lock <0x87474d48> (a hudson.model.Hudson$MasterComputer)
  	at hudson.model.Computer.setNode(Computer.java:327)
  	at hudson.model.Hudson.updateComputer(Hudson.java:704)
  	at hudson.model.Hudson.updateComputerList(Hudson.java:685)
  	- locked <0x87474ca0> (a hudson.util.CopyOnWriteMap$Hash)
  	at hudson.model.Hudson.setNodes(Hudson.java:1076)
  	at hudson.model.Hudson.addNode(Hudson.java:1060)
  	- locked <0x87474cb0> (a hudson.model.Hudson)
  	at org.jvnet.hudson.test.HudsonTestCase.createSlave(HudsonTestCase.java:247)
  	at hudson.slaves.NodeProvisionerTest.testBaselineSlaveUsage(NodeProvisionerTest.java:86)
  	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  	at java.lang.reflect.Method.invoke(Method.java:597)
  	at junit.framework.TestCase.runTest(TestCase.java:154)
  	at org.jvnet.hudson.test.HudsonTestCase.runTest(HudsonTestCase.java:151)
  	at junit.framework.TestCase.runBare(TestCase.java:127)
  	at junit.framework.TestResult$1.protect(TestResult.java:106)
  	at junit.framework.TestResult.runProtected(TestResult.java:124)
  	at junit.framework.TestResult.run(TestResult.java:109)
  	at junit.framework.TestCase.run(TestCase.java:118)
  	at junit.framework.TestSuite.runTest(TestSuite.java:208)
  	at junit.framework.TestSuite.run(TestSuite.java:203)
  	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  	at java.lang.reflect.Method.invoke(Method.java:597)
  	at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
  	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
  	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
  	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
  	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  	at java.lang.reflect.Method.invoke(Method.java:597)
  	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
  	at org.apache.maven.surefire.booter.SurefireBooter.run(SurefireBooter.java:241)
  	at org.apache.maven.plugin.surefire.SurefirePlugin.execute(SurefirePlugin.java:537)
  	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
  	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
  	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
  	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
  	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
  	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
  	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
  	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)
  	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:126)
  	at org.apache.maven.cli.MavenCli.main(MavenCli.java:282)
  	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  	at java.lang.reflect.Method.invoke(Method.java:597)
  	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
  	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
  	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
  	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
  
  Found 1 deadlock.
................
  r13852 | kohsuke | 2008-12-24 14:32:29 -0800 (Wed, 24 Dec 2008) | 1 line
  
  bug fix in the test case.
................
  r13854 | kohsuke | 2008-12-24 15:20:22 -0800 (Wed, 24 Dec 2008) | 2 lines
  
  Using a new version of Rhino to get a proper exception chaining.
................
  r13855 | kohsuke | 2008-12-24 15:22:13 -0800 (Wed, 24 Dec 2008) | 1 line
  
  typo
................
  r13856 | kohsuke | 2008-12-24 15:37:56 -0800 (Wed, 24 Dec 2008) | 1 line
  
  CR shouldn't be in the repository
................
  r13859 | kohsuke | 2008-12-24 15:50:32 -0800 (Wed, 24 Dec 2008) | 3 lines
  
  Fixed svn:eol-style.
................
  r13866 | kohsuke | 2008-12-24 21:26:43 -0800 (Wed, 24 Dec 2008) | 3 lines
  
  Copying rev.13860 to retry a merge that now looks suspicious.
................
  r13869 | kohsuke | 2008-12-24 22:03:46 -0800 (Wed, 24 Dec 2008) | 2 lines
  
  The 2nd merge was successful, so adopting the successful merge as the multiple-computer-per-node branch.
................
  r13872 | kohsuke | 2008-12-25 07:28:37 -0800 (Thu, 25 Dec 2008) | 1 line
  
  fixed a test failure
................
  r13873 | kohsuke | 2008-12-25 08:16:49 -0800 (Thu, 25 Dec 2008) | 1 line
  
  expanded NodeProvisioner to work on per-label basis
................
  r13874 | kohsuke | 2008-12-25 08:27:32 -0800 (Thu, 25 Dec 2008) | 1 line
  
  bug fix
................
  r13875 | kohsuke | 2008-12-25 08:33:17 -0800 (Thu, 25 Dec 2008) | 1 line
  
  bug fix
................
  r13876 | kohsuke | 2008-12-25 08:45:03 -0800 (Thu, 25 Dec 2008) | 3 lines
  
  [HUDSON-2605] Strangely, I discovered that on some File, which is new File("./target/hudson-for-test"), file.exists()==false but file.getAbsoluteFile().exists()==true.
  
  It looks like this happens when $PWD of the process at the OS level is different from System.getProperty("user.dir")
................
  r13878 | kohsuke | 2008-12-25 15:52:45 -0800 (Thu, 25 Dec 2008) | 1 line
  
  added a marker file
................
  r13879 | kohsuke | 2008-12-25 15:53:13 -0800 (Thu, 25 Dec 2008) | 1 line
  
  use marker file to find the hudson main workspace.
................
  r13883 | kohsuke | 2008-12-26 07:50:44 -0800 (Fri, 26 Dec 2008) | 1 line
  
  avoid using a deprecated method.
................
  r13884 | kohsuke | 2008-12-26 07:50:59 -0800 (Fri, 26 Dec 2008) | 1 line
  
  adding more probes
................
  r13885 | kohsuke | 2008-12-26 08:15:42 -0800 (Fri, 26 Dec 2008) | 1 line
  
  for analyzing test failures, capturing the output is crucial.
................
  r13887 | kohsuke | 2008-12-26 11:25:12 -0800 (Fri, 26 Dec 2008) | 1 line
  
  allow sub-types to intercept mutation
................
  r13888 | kohsuke | 2008-12-26 11:26:01 -0800 (Fri, 26 Dec 2008) | 1 line
  
  clouds need to be taken into account before marking a label as pointless.
................
  r13889 | kohsuke | 2008-12-26 11:26:40 -0800 (Fri, 26 Dec 2008) | 3 lines
  
  fixing bugs in NodeProvisioner.
  
  Conservative estimate on idle executors have to be max, not min.
................
  r13890 | kohsuke | 2008-12-26 11:42:53 -0800 (Fri, 26 Dec 2008) | 1 line
  
  turns out the problem was that we were adding multiple slaves under the same name, which confused Hudson to no end.
................
  r13896 | kohsuke | 2008-12-27 07:44:20 -0800 (Sat, 27 Dec 2008) | 1 line
  
  formatting changes
................
  r13897 | kohsuke | 2008-12-27 07:45:00 -0800 (Sat, 27 Dec 2008) | 1 line
  
  reprot the test name to stdout so that one can easily distinguish different tests in target/surefire-reports/xyz-output.txt
................
  r13898 | kohsuke | 2008-12-27 07:54:53 -0800 (Sat, 27 Dec 2008) | 1 line
  
  doc improvement
................
  r13899 | kohsuke | 2008-12-27 09:59:07 -0800 (Sat, 27 Dec 2008) | 1 line
  
  split the functionality into two classes
................
  r13900 | kohsuke | 2008-12-27 10:00:29 -0800 (Sat, 27 Dec 2008) | 1 line
  
  doc improvement
................
  r13901 | kohsuke | 2008-12-27 10:06:24 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added 'tick'
................
  r13902 | kohsuke | 2008-12-27 10:08:04 -0800 (Sat, 27 Dec 2008) | 1 line
  
  adding graph rendering of the load statistics
................
  r13903 | kohsuke | 2008-12-27 10:19:41 -0800 (Sat, 27 Dec 2008) | 1 line
  
  improved graph layout
................
  r13904 | kohsuke | 2008-12-27 10:21:05 -0800 (Sat, 27 Dec 2008) | 1 line
  
  Picker -> TimeScale to better reflect what it is.
................
  r13905 | kohsuke | 2008-12-27 10:40:27 -0800 (Sat, 27 Dec 2008) | 1 line
  
  duplicate
................
  r13906 | kohsuke | 2008-12-27 14:39:36 -0800 (Sat, 27 Dec 2008) | 1 line
  
  renamed to a shorter name
................
  r13907 | kohsuke | 2008-12-27 15:03:25 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added icons
................
  r13908 | kohsuke | 2008-12-27 16:20:37 -0800 (Sat, 27 Dec 2008) | 1 line
  
  renamed to make 'loadStatistics' the URL binding.
................
  r13909 | kohsuke | 2008-12-27 16:21:01 -0800 (Sat, 27 Dec 2008) | 1 line
  
  exposing loadStatistics for Computer for better URL binding
................
  r13910 | kohsuke | 2008-12-27 16:21:16 -0800 (Sat, 27 Dec 2008) | 1 line
  
  adding UI support
................
  r13911 | kohsuke | 2008-12-27 19:31:43 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added some basic visualization
................
  r13912 | kohsuke | 2008-12-27 19:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
  
  if there's no description, don't even show it.
................
  r13913 | kohsuke | 2008-12-27 19:39:26 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added load statistics page for the label as well.
................
  r13914 | kohsuke | 2008-12-27 19:48:55 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added one more convenience method.
................
  r13915 | kohsuke | 2008-12-27 19:54:29 -0800 (Sat, 27 Dec 2008) | 1 line
  
  refactored so that a different Dataset can be fed.
................
  r13916 | kohsuke | 2008-12-27 19:59:20 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added global load statistics lnk to the management screen.
................
  r13917 | kohsuke | 2008-12-27 20:31:01 -0800 (Sat, 27 Dec 2008) | 1 line
  
  <dt>s should use the bold font to distinguish them from <dd>s
................
  r13918 | kohsuke | 2008-12-27 20:35:10 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added description of what the graph means.
................
  r13919 | kohsuke | 2008-12-27 20:35:39 -0800 (Sat, 27 Dec 2008) | 1 line
  
  added description of what the graph means.
................


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14215 71c3de6d-444a-0410-be80-ed276b4c234a
  • Loading branch information
kohsuke committed Jan 7, 2009
1 parent 8ba8ae0 commit 8d771bc
Show file tree
Hide file tree
Showing 112 changed files with 4,569 additions and 496 deletions.
1 change: 1 addition & 0 deletions .hudson
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This file is used as a marker for the test harness to discover the root directory of Hudson.
4 changes: 2 additions & 2 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,7 @@
<dependency>
<groupId>org.jvnet.hudson</groupId>
<artifactId>commons-jexl</artifactId>
<version>1.1-hudson-20080725</version>
<version>1.1-hudson-20081031</version>
</dependency>
<dependency>
<groupId>org.jvnet.hudson</groupId>
Expand Down Expand Up @@ -475,7 +475,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8</version>
<version>4.3.1</version>
</dependency>
<dependency><!-- needed by Jelly -->
<groupId>javax.servlet</groupId>
Expand Down
6 changes: 6 additions & 0 deletions core/src/main/java/hudson/Functions.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import hudson.security.SecurityRealm;
import hudson.slaves.ComputerLauncher;
import hudson.slaves.RetentionStrategy;
import hudson.slaves.Cloud;
import hudson.tasks.BuildStep;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildWrapper;
Expand All @@ -33,6 +34,7 @@
import hudson.tasks.Publisher;
import hudson.util.Area;
import hudson.util.Iterators;
import hudson.util.DescriptorList;
import org.acegisecurity.providers.anonymous.AnonymousAuthenticationToken;
import org.apache.commons.jelly.JellyContext;
import org.apache.commons.jelly.JellyTagException;
Expand Down Expand Up @@ -996,6 +998,10 @@ public boolean hyperlinkMatchesCurrentPage(String href) throws UnsupportedEncodi
public static List<PageDecorator> getPageDecorators() {
return (List)PageDecorator.ALL;
}

public static DescriptorList<Cloud> getCloudDescriptors() {
return Cloud.ALL;
}

private static final Pattern SCHEME = Pattern.compile("[a-z]+://.+");

Expand Down
7 changes: 7 additions & 0 deletions core/src/main/java/hudson/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,13 @@ public static String encode(String s) {
}
}

/**
* Surrounds by a single-quote.
*/
public static String singleQuote(String s) {
return '\''+s+'\'';
}

/**
* Escapes HTML unsafe characters like &lt;, &amp;to the respective character entities.
*/
Expand Down
17 changes: 16 additions & 1 deletion core/src/main/java/hudson/model/AbstractProject.java
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
protected AbstractProject(ItemGroup parent, String name) {
super(parent,name);

if(!Hudson.getInstance().getSlaves().isEmpty()) {
if(!Hudson.getInstance().getNodes().isEmpty()) {
// if a new job is configured with Hudson that already has slave nodes
// make it roamable by default
canRoam = true;
Expand Down Expand Up @@ -195,6 +195,21 @@ public Label getAssignedLabel() {
return Hudson.getInstance().getLabel(assignedNode);
}

/**
* Sets the assigned label.
*/
public void setAssignedLabel(Label l) throws IOException {
if(l==null) {
canRoam = true;
assignedNode = null;
} else {
canRoam = false;
if(l==Hudson.getInstance().getSelfLabel()) assignedNode = null;
else assignedNode = l.getName();
}
save();
}

/**
* Get the term used in the UI to represent this kind of {@link AbstractProject}.
* Must start with a capital letter.
Expand Down
155 changes: 128 additions & 27 deletions core/src/main/java/hudson/model/Computer.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,42 @@

import hudson.EnvVars;
import hudson.Util;
import hudson.slaves.ComputerLauncher;
import hudson.slaves.RetentionStrategy;
import hudson.model.Descriptor.FormException;
import hudson.node_monitors.NodeMonitor;
import hudson.remoting.Channel;
import hudson.remoting.VirtualChannel;
import hudson.security.ACL;
import hudson.security.AccessControlled;
import hudson.security.Permission;
import hudson.slaves.ComputerLauncher;
import hudson.slaves.RetentionStrategy;
import hudson.tasks.BuildWrapper;
import hudson.tasks.Publisher;
import hudson.util.DaemonThreadFactory;
import hudson.util.ExceptionCatchingThreadFactory;
import hudson.util.RemotingDiagnostics;
import hudson.util.RunList;
import hudson.util.ExceptionCatchingThreadFactory;
import hudson.util.Futures;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;

import javax.servlet.ServletException;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.LogRecord;
import java.nio.charset.Charset;

import javax.servlet.ServletException;

import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;

/**
* Represents the running state of a remote computer that holds {@link Executor}s.
*
Expand All @@ -52,7 +53,8 @@
*
* Also, even if you remove a {@link Node}, it takes time for the corresponding
* {@link Computer} to be removed, if some builds are already in progress on that
* node.
* node. Or when the node configuration is changed, unaffected {@link Computer} object
* remains intact, while all the {@link Node} objects will go away.
*
* <p>
* This object also serves UI (since {@link Node} is an interface and can't have
Expand Down Expand Up @@ -135,20 +137,44 @@ public boolean hasPermission(Permission permission) {
*/
public abstract void doLaunchSlaveAgent( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException;

/**
* @deprecated Use {@link #connect(boolean)}
*/
public final void launch() {
connect(true);
}

/**
* Do the same as {@link #doLaunchSlaveAgent(StaplerRequest, StaplerResponse)}
* but outside the context of serving a request.
*
* If already connected, no-op.
* <p>
* If already connected or if this computer doesn't support proactive launching, no-op.
* This method may return immediately
* while the launch operation happens asynchronously.
*
* @see #disconnect()
*
* @param forceReconnect
* If true and a connect activity is already in progress, it will be cancelled and
* the new one will be started. If false, and a connect activity is already in progress, this method
* will do nothing and just return the pending connection operation.
* @return
* A {@link Future} representing pending completion of the task.
*/
public abstract void launch();
public abstract Future<?> connect(boolean forceReconnect);

/**
* Disconnect this computer.
*
* If this is the master, no-op
* If this is the master, no-op. This method may return immediately
* while the launch operation happens asynchronously.
*
* @return
* {@link Future} to track the asynchronous disconnect operation.
* @see #connect(boolean)
*/
public void disconnect() { }
public Future<?> disconnect() { return Futures.precomputed(null); }

/**
* Number of {@link Executor}s that are configured for this computer.
Expand Down Expand Up @@ -176,7 +202,11 @@ public String getName() {
public Node getNode() {
if(nodeName==null)
return Hudson.getInstance();
return Hudson.getInstance().getSlave(nodeName);
return Hudson.getInstance().getNode(nodeName);
}

public LoadStatistics getLoadStatistics() {
return getNode().getSelfLabel().loadStatistics;
}

/**
Expand Down Expand Up @@ -205,6 +235,15 @@ public boolean isOffline() {
return temporarilyOffline || getChannel()==null;
}

public final boolean isOnline() {
return !isOffline();
}

/**
* Is a {@link #connect(boolean)} operation in progress?
*/
public abstract boolean isConnecting();

/**
* Returns true if this computer is supposed to be launched via JNLP.
* @deprecated see {@linkplain #isLaunchSupported()} and {@linkplain ComputerLauncher}
Expand Down Expand Up @@ -300,23 +339,28 @@ protected void setNode(Node node) {
}

/**
* Called to notify {@link Computer} that it will be discarded.
* Called by {@link Hudson#updateComputerList()} to notify {@link Computer} that it will be discarded.
*/
protected void kill() {
setNumExecutors(0);
}

private synchronized void setNumExecutors(int n) {
this.numExecutors = n;
if(numExecutors==n) return; // no-op

// send signal to all idle executors to potentially kill them off
for( Executor e : executors )
if(e.isIdle())
e.interrupt();
int diff = n-numExecutors;
this.numExecutors = n;

// if the number is increased, add new ones
while(executors.size()<numExecutors)
executors.add(new Executor(this));
if(diff<0) {
// send signal to all idle executors to potentially kill them off
for( Executor e : executors )
if(e.isIdle())
e.interrupt();
} else {
// if the number is increased, add new ones
while(executors.size()<numExecutors)
executors.add(new Executor(this));
}
}

/**
Expand All @@ -331,6 +375,17 @@ public int countIdle() {
return n;
}

/**
* Returns the number of {@link Executor}s that are doing some work right now.
*/
public final int countBusy() {
return countExecutors()-countIdle();
}

public final int countExecutors() {
return executors.size();
}

/**
* Gets the read-only snapshot view of all {@link Executor}s.
*/
Expand All @@ -351,7 +406,7 @@ public final boolean isIdle() {
}

/**
* Returns the time when this computer first became idle.
* Returns the time when this computer last became idle.
*
* <p>
* If this computer is already idle, the return value will point to the
Expand Down Expand Up @@ -508,6 +563,46 @@ public void doScript( StaplerRequest req, StaplerResponse rsp ) throws IOExcepti
req.getView(this,"_script.jelly").forward(req,rsp);
}

/**
* Accepts the update to the node configuration.
*/
public void doConfigSubmit( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException {
try {
checkPermission(Hudson.CONFIGURE); // TODO: new permission?

final Hudson app = Hudson.getInstance();

Node result = getNode().getDescriptor().newInstance(req, req.getSubmittedForm());

// replace the old Node object by the new one
synchronized (app) {
List<Node> nodes = new ArrayList<Node>(app.getNodes());
int i = nodes.indexOf(getNode());
if(i<0) {
sendError("This slave appears to be removed while you were editing the configuration",req,rsp);
return;
}

nodes.set(i,result);
app.setNodes(nodes);
}

// take the user back to the slave top page.
rsp.sendRedirect2("../"+result.getNodeName()+'/');
} catch (FormException e) {
sendError(e,req,rsp);
}
}

/**
* Really deletes the slave.
*/
public void doDoDelete(StaplerResponse rsp) throws IOException {
checkPermission(DELETE);
Hudson.getInstance().removeNode(getNode());
rsp.sendRedirect("..");
}

/**
* Handles incremental log.
*/
Expand Down Expand Up @@ -535,4 +630,10 @@ public static Computer currentComputer() {
public boolean isAcceptingTasks() {
return true;
}

// TODO: define this as a separate permission?
public static final Permission CONFIGURE = Hudson.CONFIGURE;
public static final Permission DELETE = Hudson.DELETE;


}

0 comments on commit 8d771bc

Please sign in to comment.