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"

          Marcus Cobden created issue -

          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?
          Jesse Glick made changes -
          Resolution New: Incomplete [ 4 ]
          Status Original: Open [ 1 ] New: Resolved [ 5 ]
          Jesse Glick made changes -
          Description Original: 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
          }}
          New: I highly suspect it's attempting to archive the DurableTask's controlDir.

          {code:none}
          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
          {code}

          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 made changes -
          Resolution Original: Incomplete [ 4 ]
          Status Original: Resolved [ 5 ] New: Reopened [ 4 ]

          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
          R. Tyler Croy made changes -
          Workflow Original: JNJira [ 165337 ] New: JNJira + In-Review [ 186313 ]
          Andrew Bayer made changes -
          Component/s New: pipeline-general [ 21692 ]

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

              Created:
              Updated: