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

CpsThread(Timeout) raises InterruptedException

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Not A Defect
    • Component/s: workflow-cps-plugin
    • Labels:
      None
    • Environment:
      Jenkins ver. 2.190.1
      workflow CPS plugin ver. 2.80
    • Similar Issues:

      Description

      Our declarative pipeline(for isolating the problem) is using a custom step of our shared library. This custom step shall represent a long running REST call by just calling Thread.sleep (360000).

      Code:

       

      {{pipeline
      {
      agent

      { label'master' }

      options
      {
      timestamps()
      buildDiscarder(logRotator(numToKeepStr: '10'))
      skipDefaultCheckout()
      }

      stages
      {
      stage('Thread.sleep')
      {

      steps

      { sleepService(360000) }

      }
      }
      }}}

      Custom step from shared library:

       

      {{import java.lang.*;

      def String call(long millis) {

      timeout(600)
      {
      echo "Current thread name: ${Thread.currentThread().getName()}"
      echo "Current thread classname: ${Thread.currentThread().getClass().getName()}"
      Thread.sleep (millis)
      }
      }}}

      Executing this, is causing the following exception:

       

      {{java.lang.InterruptedException: sleep interrupted
      at java.lang.Thread.sleep(Native Method)
      at java_lang_Thread$sleep.call(Unknown Source)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
      at soiServiceSleep.call(soiServiceSleep.groovy:9)
      at __cps.transform__(Native Method)
      at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:86)
      at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
      at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
      at sun.reflect.GeneratedMethodAccessor577.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
      at com.cloudbees.groovy.cps.impl.LocalVariableBlock$LocalVariable.get(LocalVariableBlock.java:39)
      at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
      at com.cloudbees.groovy.cps.impl.LocalVariableBlock.evalLValue(LocalVariableBlock.java:28)
      at com.cloudbees.groovy.cps.LValueBlock$BlockImpl.eval(LValueBlock.java:55)
      at com.cloudbees.groovy.cps.LValueBlock.eval(LValueBlock.java:16)
      at com.cloudbees.groovy.cps.Next.step(Next.java:83)
      at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
      at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
      at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
      at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
      at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
      at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:185)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:405)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:96)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:317)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:281)
      at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
      at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
      at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      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)}}

      It seems like this is caused by timeout of 5 minutes of the CPSThread. Is this a bug in the CPS thread or is there a way to extend the custom steps to avoid this problem?

        Attachments

          Activity

          Hide
          jglick Jesse Glick added a comment -

          A library is not a “custom step”, that would be implemented in Java (and there is one for HTTP calls already). You may not block the CPS VM thread. All operations must be asynchronous.

          Show
          jglick Jesse Glick added a comment - A library is not a “custom step”, that would be implemented in Java (and there is one for HTTP calls already). You may not block the CPS VM thread. All operations must be asynchronous.
          Hide
          tullrich Thomas Ullrich added a comment -

          Can you tell me any examples for these asynchronous operations?

          Show
          tullrich Thomas Ullrich added a comment - Can you tell me any examples for these asynchronous operations?
          Show
          jglick Jesse Glick added a comment - https://github.com/jenkinsci/workflow-step-api-plugin/blob/master/README.md#creating-an-asynchronous-step
          Hide
          tullrich Thomas Ullrich added a comment -

          Thanks for the link. I tried it out and it worked. Great!

          Show
          tullrich Thomas Ullrich added a comment - Thanks for the link. I tried it out and it worked. Great!

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            tullrich Thomas Ullrich
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: