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

Stash command with includes: '**' fails due to "unclosed entries"

      I highly suspect it's attempting to archive the DurableTask's controlDir.

      java.io.IOException: remote file operation failed: /home/jenkins/workspace/TTVM/DSL at hudson.remoting.Channel@4946711c:ttvm-build-02-1e8c2034: java.io.IOException: This archives contains unclosed entries.
      	at hudson.FilePath.act(FilePath.java:987)
      	at hudson.FilePath.act(FilePath.java:969)
      	at hudson.FilePath.archive(FilePath.java:450)
      	at org.jenkinsci.plugins.workflow.flow.StashManager.stash(StashManager.java:87)
      	at org.jenkinsci.plugins.workflow.support.steps.stash.StashStep$Execution.run(StashStep.java:85)
      	at org.jenkinsci.plugins.workflow.support.steps.stash.StashStep$Execution.run(StashStep.java:75)
      	at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:49)
      	at hudson.security.ACL.impersonate(ACL.java:213)
      	at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:47)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: java.io.IOException: This archives contains unclosed entries.
      	at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.finish(TarArchiveOutputStream.java:225)
      	at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.close(TarArchiveOutputStream.java:241)
      	at hudson.util.io.TarArchiver.close(TarArchiver.java:115)
      	at hudson.FilePath$1.invoke(FilePath.java:456)
      	at hudson.FilePath$1.invoke(FilePath.java:450)
      	at hudson.FilePath$FileCallableWrapper.call(FilePath.java:2691)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:121)
      	at hudson.remoting.UserRequest.perform(UserRequest.java:49)
      	at hudson.remoting.Request$2.run(Request.java:324)
      	at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at hudson.remoting.Engine$1$1.run(Engine.java:63)
      	at java.lang.Thread.run(Thread.java:745)
      	at ......remote call to ttvm-build-02-1e8c2034(Native Method)
      	at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1413)
      	at hudson.remoting.UserResponse.retrieve(UserRequest.java:221)
      	at hudson.remoting.Channel.call(Channel.java:778)
      	at hudson.FilePath.act(FilePath.java:980)
      	... 13 more
      

          [JENKINS-30244] Stash command with includes: '**' fails due to "unclosed entries"

          Jesse Glick added a comment -

          Doubtful that a durable-task control directory is responsible, since that is deleted after such a task finishes, so you would encounter such a problem only in a script like

          parallel a: {
            sh 'sleep 60'
          }, b: {
            sleep 5
            stash 'all'
          }
          

          Anyway you have no steps to reproduce, or information about your environment. Presumably you are running Workflow 1.10. But what version of Jenkins core? The stack trace suggests either a trunk build including JENKINS-10629, or the ill-fated 1.610. This is notable because the error message is coming from within Apache Commons Compress, which only those versions of Jenkins use (to my knowledge); Workflow is only calling a utility method in Jenkins core to create a tarball, so this feels more like a core bug.

          And what is the Workflow script? You mention includes: '**' without further details. If you include only specific files does it succeed? Is the error reproducible, or you just saw it once?

          Jesse Glick added a comment - Doubtful that a durable-task control directory is responsible, since that is deleted after such a task finishes, so you would encounter such a problem only in a script like parallel a: { sh 'sleep 60' }, b: { sleep 5 stash 'all' } Anyway you have no steps to reproduce, or information about your environment. Presumably you are running Workflow 1.10. But what version of Jenkins core? The stack trace suggests either a trunk build including JENKINS-10629 , or the ill-fated 1.610. This is notable because the error message is coming from within Apache Commons Compress, which only those versions of Jenkins use (to my knowledge); Workflow is only calling a utility method in Jenkins core to create a tarball, so this feels more like a core bug. And what is the Workflow script? You mention includes: '**' without further details. If you include only specific files does it succeed? Is the error reproducible, or you just saw it once?

          Michael Rose added a comment -

          I am having the same issue with the workflow script that I created.

          Jenkins version: 1.651
          Pipeline plugin version: 1.14

          Here is a simplified version of the script that produces the error.

          x = ['x86_64-Linux-RHEL7','x86_64-Linux-2.618']
          conf=[:]
          for (int i = 0; i < 2; i++){
              def arch=x[i]
              conf[arch] = {
                  node(arch) {
                      sh "mkdir -p $arch/x/xx/xxx/xxxx; touch $arch-y1 $arch/x/xx/y2 $arch/x/xx/xxx/y3 $arch/x/xx/xxx/xxxx/y4"
                      stash includes: "$arch-y1,$arch/**/*", name: "${arch}-common"
                  }
              }
          }
          node('master'){
              parallel conf
          }
          

          Michael Rose added a comment - I am having the same issue with the workflow script that I created. Jenkins version: 1.651 Pipeline plugin version: 1.14 Here is a simplified version of the script that produces the error. x = ['x86_64-Linux-RHEL7','x86_64-Linux-2.618'] conf=[:] for (int i = 0; i < 2; i++){ def arch=x[i] conf[arch] = { node(arch) { sh "mkdir -p $arch/x/xx/xxx/xxxx; touch $arch-y1 $arch/x/xx/y2 $arch/x/xx/xxx/y3 $arch/x/xx/xxx/xxxx/y4" stash includes: "$arch-y1,$arch/**/*", name: "${arch}-common" } } } node('master'){ parallel conf }

          Michael Rose added a comment -

          Actually it looks like the problem has nothing to do with parallel and is just the fact that stash is being called more than once.

          This script produces the same error.

          x = ['x86_64-Linux-RHEL7','x86_64-Linux-2.618']
          conf=[:]
          for (int i = 0; i < 2; i++){
              def arch=x[i]
              node(arch) {
                  sh "mkdir -p $arch/x/xx/xxx/xxxx; touch $arch-y1 $arch/x/xx/y2 $arch/x/xx/xxx/y3 $arch/x/xx/xxx/xxxx/y4"
                  stash includes: "$arch-y1,$arch/**/*", name: "${arch}-common"
              }
          }
          

          Michael Rose added a comment - Actually it looks like the problem has nothing to do with parallel and is just the fact that stash is being called more than once. This script produces the same error. x = [ 'x86_64-Linux-RHEL7' , 'x86_64-Linux-2.618' ] conf=[:] for ( int i = 0; i < 2; i++){ def arch=x[i] node(arch) { sh "mkdir -p $arch/x/xx/xxx/xxxx; touch $arch-y1 $arch/x/xx/y2 $arch/x/xx/xxx/y3 $arch/x/xx/xxx/xxxx/y4" stash includes: "$arch-y1,$arch /**/ *" , name: "${arch}-common" } }

          Michael Rose added a comment -

          CORRECTION: It has nothing to do with the number of time stash is called. It simply failed when run on RHEL 5.6.

          x = ['x86_64-Linux-2.618'] //,'x86_64-Linux-RHEL7']
          conf=[:]
          for (int i = 0; i < 2; i++){
              def arch=x[i]
              node(arch) {
                  sh "mkdir -p $arch/x/xx/xxx/xxxx; touch $arch-y1 $arch/x/xx/y2 $arch/x/xx/xxx/y3 $arch/x/xx/xxx/xxxx/y4"
                  stash includes: "$arch-y1,$arch/**/*", name: "${arch}-$i-common"
              }
          }
          

          This caused an error when run on:
          -sh-3.2$ uname -a
          Linux b261802 2.6.18-238.5.1.el5 #1 SMP Mon Feb 21 05:52:39 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

          Michael Rose added a comment - CORRECTION: It has nothing to do with the number of time stash is called. It simply failed when run on RHEL 5.6. x = ['x86_64-Linux-2.618'] //,'x86_64-Linux-RHEL7'] conf=[:] for (int i = 0; i < 2; i++){ def arch=x[i] node(arch) { sh "mkdir -p $arch/x/xx/xxx/xxxx; touch $arch-y1 $arch/x/xx/y2 $arch/x/xx/xxx/y3 $arch/x/xx/xxx/xxxx/y4" stash includes: "$arch-y1,$arch/**/*", name: "${arch}-$i-common" } } This caused an error when run on: -sh-3.2$ uname -a Linux b261802 2.6.18-238.5.1.el5 #1 SMP Mon Feb 21 05:52:39 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

          Jesse Glick added a comment - - edited

          Hmm, will have to see if this can be reproduced using a stock Docker image, or if it needs VirtualBox etc. Do you happen to know how to reproduce from scratch? Does it work on some platforms and fail on others? I was not able to reproduce using a trimmed version of your script in a functional test on Ubuntu (4.4.0-43 x86_64).

          Jesse Glick added a comment - - edited Hmm, will have to see if this can be reproduced using a stock Docker image, or if it needs VirtualBox etc. Do you happen to know how to reproduce from scratch? Does it work on some platforms and fail on others? I was not able to reproduce using a trimmed version of your script in a functional test on Ubuntu (4.4.0-43 x86_64).

          Viacheslav Dubrovskyi added a comment - - edited

          Get the same error on Centos-7
          Jenkins ver. 2.138.2
          workflow-basic-steps 2.11
          And it happen very often: 2-3 times from 10 builds.
          Don't see errors in jenkins logs.

          Viacheslav Dubrovskyi added a comment - - edited Get the same error on Centos-7 Jenkins ver. 2.138.2 workflow-basic-steps 2.11 And it happen very often: 2-3 times from 10 builds. Don't see errors in jenkins logs.

          We also started to experience this issue with our CI process.

          However we stash files from a z/OS Jenkins Slave, any update regarding this ticket?

          Tomer Zelberzvig added a comment - We also started to experience this issue with our CI process. However we stash files from a z/OS Jenkins Slave, any update regarding this ticket?

            Unassigned Unassigned
            mcobden Marcus Cobden
            Votes:
            1 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: