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

'Build Record Root Directory' is a UI option but is unsafe to change while Jenkins is running

    • Evergreen - Milestone 1

      How to reproduce

      • Start Jenkins
      • Create a job and run/create some builds
      • Change default "Build Record Root Directory" to ${JENKINS_HOME}/var/${ITEM_FULL_NAME}/builds/
      • Rename the job
      • Open a build created before the rename, it will show No such file: /var/jenkins_home/var/new_name/builds/2/log

      Stack trace

      There's the following stack trace when renaming:

      Mar 14, 2018 9:29:03 AM hudson.model.Job$SubItemBuildsLocationImpl onLocationChanged                                 
      SEVERE: Failed to move /var/jenkins_home/var/current_name/builds/ to /var/jenkins_home/var/new_name/builds           
      java.io.FileNotFoundException: /var/jenkins_home/var/current_name/builds/lastFailedBuild (No such file or directory) 
              at java.io.FileInputStream.open0(Native Method)                                                              
              at java.io.FileInputStream.open(FileInputStream.java:195)                                                    
              at java.io.FileInputStream.<init>(FileInputStream.java:138)                                                  
              at org.apache.commons.io.FileUtils.doCopyFile(FileUtils.java:1138)
              at org.apache.commons.io.FileUtils.doCopyDirectory(FileUtils.java:1428)
              at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1389)
              at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1261)
              at org.apache.commons.io.FileUtils.copyDirectory(FileUtils.java:1230)
              at org.apache.commons.io.FileUtils.moveDirectory(FileUtils.java:2755)
              at hudson.model.Job$SubItemBuildsLocationImpl.onLocationChanged(Job.java:701)
              at hudson.model.listeners.ItemListener$6.apply(ItemListener.java:272)
              at hudson.model.listeners.ItemListener$6.apply(ItemListener.java:270)
              at hudson.model.listeners.ItemListener.forAll(ItemListener.java:180)
              at hudson.model.listeners.ItemListener.fireLocationChange(ItemListener.java:270)
              at hudson.model.AbstractItem.renameTo(AbstractItem.java:438)
              at hudson.model.Job.renameTo(Job.java:653)
              at hudson.model.AbstractItem.doConfirmRename(AbstractItem.java:261)
              at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
              at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
              at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)
              at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
              at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)
              at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)
              at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)
              at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
              at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
              at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:248)
              at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
              at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
              at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
              at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
              at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
              at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)
              at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
              at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:99)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
              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 jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
              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 jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
              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:67)
              at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
              at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)
              at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
              at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
              at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
              at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
              at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
              at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
              at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
              at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
              at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
              at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
              at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
              at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
              at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
              at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
              at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
              at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
              at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
              at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
              at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
              at org.eclipse.jetty.server.Server.handle(Server.java:564)
              at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
              at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
              at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
              at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
              at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
              at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
              at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
              at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
              at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
              at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
              at java.lang.Thread.run(Thread.java:748)
      

          [JENKINS-50164] 'Build Record Root Directory' is a UI option but is unsafe to change while Jenkins is running

          Baptiste Mathus added a comment - Refer to https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties for documentation.

          Code changed in jenkins
          User: Baptiste Mathus
          Path:
          content/doc/book/architecting-for-scale.adoc
          http://jenkins-ci.org/commit/jenkins.io/2da6c1addc4830acf28435bf691896dee0612b31
          Log:
          JENKINS-50164 Document builds location configuration

          NOT documentation the workspaces location customization on purpose:
          people should generally not have workspaces on `master` anyway since
          this would mean builds are run there.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Baptiste Mathus Path: content/doc/book/architecting-for-scale.adoc http://jenkins-ci.org/commit/jenkins.io/2da6c1addc4830acf28435bf691896dee0612b31 Log: JENKINS-50164 Document builds location configuration NOT documentation the workspaces location customization on purpose: people should generally not have workspaces on `master` anyway since this would mean builds are run there.

          Code changed in jenkins
          User: R. Tyler Croy
          Path:
          content/doc/book/architecting-for-scale.adoc
          http://jenkins-ci.org/commit/jenkins.io/0338ee06238749f9f0cf4cc1a234308cce43d75c
          Log:
          Merge pull request #1510 from batmat/JENKINS-50164

          JENKINS-50164 Document builds location configuration

          Compare: https://github.com/jenkins-infra/jenkins.io/compare/0010f35371cc...0338ee062387

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: R. Tyler Croy Path: content/doc/book/architecting-for-scale.adoc http://jenkins-ci.org/commit/jenkins.io/0338ee06238749f9f0cf4cc1a234308cce43d75c Log: Merge pull request #1510 from batmat/ JENKINS-50164 JENKINS-50164 Document builds location configuration Compare: https://github.com/jenkins-infra/jenkins.io/compare/0010f35371cc...0338ee062387

          Using Jenkins v 2.121.3 I see that the help text in the Home directory section of the /admin page is still refleting that the workspace location can be set in the "Advanced" section".

          This almost lead me to file a bug as it was something that was possible earlier and this was still being reflected in the embedded documentation (hence my expectation of it should still be possible).

          Searching for the bug here let me see that it's a "feature" no longer being able to configure this in the UI )

           

          Suggestion:

          Make the UI help text reflect where to set this, EG by a link to this page https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties
          or by making a reference to the config.xml file in the Jenkins installation dir.

           

          ...Under the Advanced section, you can choose to store build workspaces and build records elsewhere.

          Thomas von Eyben added a comment - Using Jenkins v 2.121.3 I see that the help text in the Home directory section of the /admin page is still refleting that the workspace location can be set in the "Advanced" section". This almost lead me to file a bug as it was something that was possible earlier and this was still being reflected in the embedded documentation (hence my expectation of it should still be possible). Searching for the bug here let me see that it's a "feature" no longer being able to configure this in the UI  )   Suggestion: Make the UI help text reflect where to set this, EG by a link to this page  https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties or by making a reference to the config.xml file in the Jenkins installation dir.   ...Under the  Advanced  section, you can choose to store build workspaces and build records elsewhere.

          tveyben we generally prefer to file new JIRAs for things that are not clearly regression. Here, IIUC, this looks like a small followup fix/enhancement more than a regression for this.

          Having smaller and more focused JIRAs generally helps everyone understand better the scope of an issue/change.

          Can you please open such an issue? Also, can you please add a screenshot and clarify a bit? I guess in "Home directory section of the /admin page" you meant "/configure".

          Thanks!

          Baptiste Mathus added a comment - tveyben we generally prefer to file new JIRAs for things that are not clearly regression. Here, IIUC, this looks like a small followup fix/enhancement more than a regression for this. Having smaller and more focused JIRAs generally helps everyone understand better the scope of an issue/change. Can you please open such an issue? Also, can you please add a screenshot and clarify a bit? I guess in "Home directory section of the /admin page" you meant "/configure". Thanks!

          Closing per my last comment. Thanks for your understanding.

          Baptiste Mathus added a comment - Closing per my last comment. Thanks for your understanding.

          BTW, hence:

          This almost lead me to file a bug

          Generally feel free to do it. Filing issues/bugs with a clear scope and reproduction steps is a very valuable contribution .

          Baptiste Mathus added a comment - BTW, hence: This almost lead me to file a bug Generally feel free to do it. Filing issues/bugs with a clear scope and reproduction steps is a very  valuable contribution .

          Baptiste Mathus added a comment - Filed fix as https://github.com/jenkinsci/jenkins/pull/3621  FWIW

          batmat As you suggested I have now filed JENKINS-53549

          NB.: I felt it related too much to this original issue, hence I choose not to create a new, (different projects have different logics I guess...).

           

          I have assigned it to you, I don't know if that's appropriate or not (I'm sure you'll change in that case

           

           

           

          Thomas von Eyben added a comment - batmat  As you suggested I have now filed JENKINS-53549 NB.: I felt it related too much to this original issue, hence I choose not to create a new, (different projects have different logics I guess...).   I have assigned it to you, I don't know if that's appropriate or not (I'm sure you'll change in that case      

          Thanks!

          Baptiste Mathus added a comment - Thanks!

            batmat Baptiste Mathus
            batmat Baptiste Mathus
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: