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

Configure Job deselects all Node/Label slaves

    XMLWordPrintable

    Details

    • Similar Issues:

      Description

      Starting with Hudson Version 1.376 every time entering the configuration of a job, all selected Slaves will be deselected.

      Trying to save such a configuration throws an exception:

      Status Code: 500
      Exception:
      Stacktrace:

      java.lang.RuntimeException: Failed to instantiate class hudson.matrix.LabelAxis from

      {"kind":"hudson.matrix.LabelAxis$DescriptorImpl","name":"label","stapler-class":"hudson.matrix.LabelAxis"}

      at hudson.model.Descriptor.newInstance(Descriptor.java:497)
      at hudson.model.Descriptor.newInstancesFromHeteroList(Descriptor.java:767)
      at hudson.util.DescribableList.rebuildHetero(DescribableList.java:171)
      at hudson.matrix.MatrixProject.submit(MatrixProject.java:563)
      at hudson.model.Job.doConfigSubmit(Job.java:1062)
      at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:578)
      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.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:259)
      at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:126)
      at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:65)
      at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:79)
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:534)
      at org.kohsuke.stapler.MetaClass$7.doDispatch(MetaClass.java:219)
      at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:534)
      at org.kohsuke.stapler.Stapler.invoke(Stapler.java:450)
      at org.kohsuke.stapler.Stapler.service(Stapler.java:132)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
      at winstone.ServletConfiguration.execute(ServletConfiguration.java:249)
      at winstone.RequestDispatcher.forward(RequestDispatcher.java:335)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:378)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:94)
      at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:86)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:47)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
      at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
      at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:66)
      at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
      at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
      at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
      at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:368)
      at winstone.RequestDispatcher.forward(RequestDispatcher.java:333)
      at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:244)
      at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
      at java.lang.Thread.run(Thread.java:619)
      Caused by: java.lang.NullPointerException
      at java.util.ArrayList.(ArrayList.java:131)
      at hudson.matrix.Axis.(Axis.java:74)
      at hudson.matrix.LabelAxis.(LabelAxis.java:40)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
      at org.kohsuke.stapler.RequestImpl.invokeConstructor(RequestImpl.java:409)
      at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:355)
      at hudson.model.Descriptor.newInstance(Descriptor.java:488)
      ... 55 more

      Generated by Winstone Servlet Engine v0.9.10 at Fri Sep 17 15:56:52 CEST 2010

      Workaround so far, reselect nodes/labels each time.

        Attachments

          Issue Links

            Activity

            Hide
            pingus pingus added a comment -

            With version 1.377 and recreating the matrix jobs, the issue is solved. Label and node selections are persistant again.

            Without recreating the job, the system only saved the lable part of the configuration (directly after upgrading to 1.377).

            (Is it OK to close this issue being the reporter in this case?)

            Show
            pingus pingus added a comment - With version 1.377 and recreating the matrix jobs, the issue is solved. Label and node selections are persistant again. Without recreating the job, the system only saved the lable part of the configuration (directly after upgrading to 1.377). (Is it OK to close this issue being the reporter in this case?)
            Hide
            pingus pingus added a comment -

            Sorry, too early too happy.

            After a while of further configuration work, the issue reappears. Every time I open the configuration all selected nodes and labels are gone again.

            Show
            pingus pingus added a comment - Sorry, too early too happy. After a while of further configuration work, the issue reappears. Every time I open the configuration all selected nodes and labels are gone again.
            Hide
            mindless Alan Harder added a comment -

            do you get any javascript errors reported in your browser?

            can you post steps to recreate the issue with a newly created matrix project?

            Show
            mindless Alan Harder added a comment - do you get any javascript errors reported in your browser? can you post steps to recreate the issue with a newly created matrix project?
            Hide
            pingus pingus added a comment -

            Yes, after some additional tests I've seen the issue occurs when selecting all nodes or all labels only.

            1. Create new matrix project
            2. Add axis slave
            3.a Select all nodes
            3.b Select all labels
            4. Save
            5. Configure again
            6. Open axis and all selections are gone

            If you select only a subset, the selection will be stored.

            Show
            pingus pingus added a comment - Yes, after some additional tests I've seen the issue occurs when selecting all nodes or all labels only. 1. Create new matrix project 2. Add axis slave 3.a Select all nodes 3.b Select all labels 4. Save 5. Configure again 6. Open axis and all selections are gone If you select only a subset, the selection will be stored.
            Hide
            jpschewe jpschewe added a comment -

            In my case I'm only selecting a subset.
            1. create new matrix project
            2. default axis
            3. select subset of labels
            4. save
            5. configure job
            6. all selections are gone
            At this point the save results in the exception.

            Show
            jpschewe jpschewe added a comment - In my case I'm only selecting a subset. 1. create new matrix project 2. default axis 3. select subset of labels 4. save 5. configure job 6. all selections are gone At this point the save results in the exception.
            Hide
            kbertelson kbertelson added a comment -

            Fails on our Hudson v1.377 system w/15 slaves like so:

            Create new matrix project
            Configuration Matrix > Add Axis > Slaves > Individual nodes...

            Choose all 15 slaves
            Reopen saved matrix project
            [ FAIL. All slaves are now unchecked ]
            Choose 5 slaves
            Reopen saved matrix project
            [ FAIL. All slaves are now unchecked ]
            Choose last 3 slaves
            Reopen saved matrix project
            [ Everything looks good... ]
            Choose last 5 slaves
            Reopen saved matrix project
            [ Everything looks good... ]
            Choose last 7 slaves
            Reopen saved matrix project
            [ FAIL. All slaves are now unchecked ]
            Choose last 5 slaves
            Reopen saved matrix project
            [ Everything looks good... ]

            Thought it may be related to node Decription string length since last 5 slaves have a especially short description. But that didn't seem to matter.

            Show
            kbertelson kbertelson added a comment - Fails on our Hudson v1.377 system w/15 slaves like so: Create new matrix project Configuration Matrix > Add Axis > Slaves > Individual nodes... Choose all 15 slaves Reopen saved matrix project [ FAIL. All slaves are now unchecked ] Choose 5 slaves Reopen saved matrix project [ FAIL. All slaves are now unchecked ] Choose last 3 slaves Reopen saved matrix project [ Everything looks good... ] Choose last 5 slaves Reopen saved matrix project [ Everything looks good... ] Choose last 7 slaves Reopen saved matrix project [ FAIL. All slaves are now unchecked ] Choose last 5 slaves Reopen saved matrix project [ Everything looks good... ] Thought it may be related to node Decription string length since last 5 slaves have a especially short description. But that didn't seem to matter.
            Hide
            nparry Nathan Parry added a comment -

            This happens when the total length of the names of the slaves you select exceeds 30 characters. Looks like hudson.matrix.Axis.getValueString() switches from a space delimiter to a newline delimiter at that point.

            In LabelAxis/config.jelly there is this bit of html/javascript to help determine what slaves should be checked. I'm guessing the split doesn't work when newlines are used as the delimiter.

            <div class="yahooTree labelAxis-tree" style="border: 1px solid gray; height: 10em; overflow:auto;" values="${instance.valueString}" />
            
            ...
            
            var values = (e.getAttribute("values") || "").split(" ");
            function has(v) {
                return values.include(v) ? 'checked="checked" ' : "";
            }
            
            Show
            nparry Nathan Parry added a comment - This happens when the total length of the names of the slaves you select exceeds 30 characters. Looks like hudson.matrix.Axis.getValueString() switches from a space delimiter to a newline delimiter at that point. In LabelAxis/config.jelly there is this bit of html/javascript to help determine what slaves should be checked. I'm guessing the split doesn't work when newlines are used as the delimiter. <div class= "yahooTree labelAxis-tree" style= "border: 1px solid gray; height: 10em; overflow:auto;" values= "${instance.valueString}" /> ... var values = (e.getAttribute( "values" ) || "").split(" "); function has(v) { return values.include(v) ? 'checked= "checked" ' : ""; }
            Hide
            nparry Nathan Parry added a comment -

            Not being terribly familiar with this code I can't say if this is the best approach, but changing

            split(" ")

            to...

            split(/[ \n]/)

            seems to fix the issue. (Not sure if the space in the regex is easy to see - that is splitting on either space or newline)

            Show
            nparry Nathan Parry added a comment - Not being terribly familiar with this code I can't say if this is the best approach, but changing split( " " ) to... split(/[ \n]/) seems to fix the issue. (Not sure if the space in the regex is easy to see - that is splitting on either space or newline)
            Hide
            brianjmurrell Brian J Murrell added a comment -

            It's a pity that fixing this didn't make it into 1.378 seeing as the issue seems to have been identified and even possible fixes supplied.

            Could we please get this fixed in the next release?

            Show
            brianjmurrell Brian J Murrell added a comment - It's a pity that fixing this didn't make it into 1.378 seeing as the issue seems to have been identified and even possible fixes supplied. Could we please get this fixed in the next release?
            Hide
            brianjmurrell Brian J Murrell added a comment -

            I guess the question to my answer is no. 1.379 is out and this issue is still not fixed (not in the changelog anyway).

            It's frustrating that this isn't this getting fixed. It's marked as critical even and rightfully so in that it's entirely annoying that every time I modify a multi-configuration job (i.e. make script changes) I need to re-select all of my nodes/labels. Yes. Very annoying indeed.

            If somebody has fixed this locally and can explain how I can fix my local copy I'd be happy to do so until somebody can get this fixed into a release. Thanx.

            Show
            brianjmurrell Brian J Murrell added a comment - I guess the question to my answer is no. 1.379 is out and this issue is still not fixed (not in the changelog anyway). It's frustrating that this isn't this getting fixed. It's marked as critical even and rightfully so in that it's entirely annoying that every time I modify a multi-configuration job (i.e. make script changes) I need to re-select all of my nodes/labels. Yes. Very annoying indeed. If somebody has fixed this locally and can explain how I can fix my local copy I'd be happy to do so until somebody can get this fixed into a release. Thanx.
            Hide
            cervator Cervator added a comment -

            Confirming that I've hit this issue too putting a new 1.379 install up. My old 1.355 stable install is still working great.

            I was going to try the manual fix to config.jelly posted above, but I can't find a LabelAxis dir or a config.jelly with split(" ") in it - any more directions for a patch-fix would be appreciated until this gets fixed for real

            Show
            cervator Cervator added a comment - Confirming that I've hit this issue too putting a new 1.379 install up. My old 1.355 stable install is still working great. I was going to try the manual fix to config.jelly posted above, but I can't find a LabelAxis dir or a config.jelly with split(" ") in it - any more directions for a patch-fix would be appreciated until this gets fixed for real
            Hide
            alex_barna Tzuchien added a comment -

            I have the same problem with 1.375 also !

            Show
            alex_barna Tzuchien added a comment - I have the same problem with 1.375 also !
            Hide
            abayer Andrew Bayer added a comment -

            The split change does seem to do the trick - I'm not sure the right way to do config round trip testing on this, though, since it's so heavily javascript-based. But local testing looks good - I'll commit this, and it should be in 1.381. Sorry for the delays.

            Show
            abayer Andrew Bayer added a comment - The split change does seem to do the trick - I'm not sure the right way to do config round trip testing on this, though, since it's so heavily javascript-based. But local testing looks good - I'll commit this, and it should be in 1.381. Sorry for the delays.
            Hide
            abayer Andrew Bayer added a comment -

            Ah, no, check that, 1.382.

            Show
            abayer Andrew Bayer added a comment - Ah, no, check that, 1.382.
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in hudson
            User: : abayer
            Path:
            branches/rc/core/src/main/resources/hudson/matrix/LabelAxis/config.jelly
            http://jenkins-ci.org/commit/35931
            Log:
            [FIXED JENKINS-7500] Fixed error when saving job configuration with matrix label axis longer than 30 characters

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in hudson User: : abayer Path: branches/rc/core/src/main/resources/hudson/matrix/LabelAxis/config.jelly http://jenkins-ci.org/commit/35931 Log: [FIXED JENKINS-7500] Fixed error when saving job configuration with matrix label axis longer than 30 characters
            Hide
            abayer Andrew Bayer added a comment -

            Ok, actually, I was right the first time. =) I put the change into the rc branch, so it should show up in 1.381.

            Show
            abayer Andrew Bayer added a comment - Ok, actually, I was right the first time. =) I put the change into the rc branch, so it should show up in 1.381.
            Hide
            dogfood dogfood added a comment -

            Integrated in hudson_main_trunk #339
            Merged revisions 35931,35963,35995,35997,36001 via svnmerge from
            https://www.dev.java.net/svn/hudson/branches/rc

            ........
            r35931 | abayer | 2010-10-14 19:54:34 +0200 (Thu, 14 Oct 2010) | 1 line

            [FIXED JENKINS-7500] Fixed error when saving job configuration with matrix label axis longer than 30 characters
            ........
            r35963 | kohsuke | 2010-10-15 10:19:59 +0200 (Fri, 15 Oct 2010) | 1 line

            fixed unnecessary packet fragmentation when writing out HTTP responses
            ........
            r35995 | kohsuke | 2010-10-16 18:25:31 +0200 (Sat, 16 Oct 2010) | 1 line

            [maven-release-plugin] prepare release hudson-1_381
            ........
            r35997 | kohsuke | 2010-10-16 18:25:44 +0200 (Sat, 16 Oct 2010) | 1 line

            [maven-release-plugin] prepare for next development iteration
            ........
            r36001 | kohsuke | 2010-10-16 19:25:57 +0200 (Sat, 16 Oct 2010) | 1 line

            updated changelog as a part of the release
            ........

            kohsuke :
            Files :

            • /trunk/hudson/main
            • /trunk/hudson/main/core/pom.xml
            • /trunk/hudson/main/war/pom.xml
            • /trunk/hudson/main/test/pom.xml
            • /trunk/hudson/main/remoting/pom.xml
            • /trunk/hudson/main/core/src/main/resources/hudson/matrix/LabelAxis/config.jelly
            • /trunk/hudson/main/debian/debian/changelog
            • /trunk/hudson/main/maven-plugin/pom.xml
            • /trunk/hudson/main/pom.xml
            • /trunk/hudson/main/cli/pom.xml
            • /trunk/hudson/main/ui-samples-plugin/pom.xml
            • /trunk/hudson/main/maven-agent/pom.xml
            • /trunk/hudson/main/maven-interceptor/pom.xml
            Show
            dogfood dogfood added a comment - Integrated in hudson_main_trunk #339 Merged revisions 35931,35963,35995,35997,36001 via svnmerge from https://www.dev.java.net/svn/hudson/branches/rc ........ r35931 | abayer | 2010-10-14 19:54:34 +0200 (Thu, 14 Oct 2010) | 1 line [FIXED JENKINS-7500] Fixed error when saving job configuration with matrix label axis longer than 30 characters ........ r35963 | kohsuke | 2010-10-15 10:19:59 +0200 (Fri, 15 Oct 2010) | 1 line fixed unnecessary packet fragmentation when writing out HTTP responses ........ r35995 | kohsuke | 2010-10-16 18:25:31 +0200 (Sat, 16 Oct 2010) | 1 line [maven-release-plugin] prepare release hudson-1_381 ........ r35997 | kohsuke | 2010-10-16 18:25:44 +0200 (Sat, 16 Oct 2010) | 1 line [maven-release-plugin] prepare for next development iteration ........ r36001 | kohsuke | 2010-10-16 19:25:57 +0200 (Sat, 16 Oct 2010) | 1 line updated changelog as a part of the release ........ kohsuke : Files : /trunk/hudson/main /trunk/hudson/main/core/pom.xml /trunk/hudson/main/war/pom.xml /trunk/hudson/main/test/pom.xml /trunk/hudson/main/remoting/pom.xml /trunk/hudson/main/core/src/main/resources/hudson/matrix/LabelAxis/config.jelly /trunk/hudson/main/debian/debian/changelog /trunk/hudson/main/maven-plugin/pom.xml /trunk/hudson/main/pom.xml /trunk/hudson/main/cli/pom.xml /trunk/hudson/main/ui-samples-plugin/pom.xml /trunk/hudson/main/maven-agent/pom.xml /trunk/hudson/main/maven-interceptor/pom.xml

              People

              • Assignee:
                abayer Andrew Bayer
                Reporter:
                pingus pingus
              • Votes:
                17 Vote for this issue
                Watchers:
                18 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: