-
Bug
-
Resolution: Fixed
-
Critical
-
HideOS: Amazon Linux2 CPE: cpe:2.3:o:amazon:amazon_linux:2
Java Version: OpenJDK Runtime Environment Corretto-11.0.5.10.1 (build 11.0.5+10-LTS)
Jenkins & plugin versions: See attached PDF
About Jenkins installation:
Jenkins (master) is installed as a service on an AWS EC2 instance with an EBS backed volume for Jenkins data.
Jenkins master then sits behind a load balancer
We use AWS EC2 Cloud plugin for build nodes
Things tried:
* Updated plugins that had available pluginsShowOS: Amazon Linux2 CPE: cpe:2.3:o:amazon:amazon_linux:2 Java Version: OpenJDK Runtime Environment Corretto-11.0.5.10.1 (build 11.0.5+10-LTS) Jenkins & plugin versions: See attached PDF About Jenkins installation: Jenkins (master) is installed as a service on an AWS EC2 instance with an EBS backed volume for Jenkins data. Jenkins master then sits behind a load balancer We use AWS EC2 Cloud plugin for build nodes Things tried: * Updated plugins that had available plugins
Recently Jenkins master when a job is triggered it hangs around checkout
Command that it seems to get stuck on:
git rev-list --no-walk a4539ebbe8fe6da843fb1fe4c7b0ce5cf79a0647 # timeout=10
This issue only started happening sporadically from 2019-12-17 and is impacting our CI/CD pipeline. We rely on Jenkins to deploy to our environments.
If you tried to kill the job, it is unresponsive.
If you restart Jenkins master then the job that gets stuck is no longer exists
Job Build Logs:
Started by upstream project "parent-job" build number 5 originally caused by: Branch indexing Checking out git <REPO> into /var/lib/jenkins/workspace/acceptance-tests@script to read acceptance-tests/Jenkinsfile-local using credential jenkins-git > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url git@bitbucket.org:obillex/fundit.git # timeout=10 Fetching upstream changes from git@bitbucket.org:obillex/fundit.git > git --version # timeout=10 using GIT_SSH to set credentials Jenkins access to git > git fetch --tags --progress -- <REPO>+refs/heads/*:refs/remotes/origin/* # timeout=10 > git rev-parse b6a1b7a159b86dd5a52b8385670397d568345c53^{commit} # timeout=10 Checking out Revision b6a1b7a159b86dd5a52b8385670397d568345c53 (detached) > git config core.sparsecheckout # timeout=10 > git checkout -f b6a1b7a159b86dd5a52b8385670397d568345c53 # timeout=10 Commit message: "Commit message" > git rev-list --no-walk a4539ebbe8fe6da843fb1fe4c7b0ce5cf79a0647 # timeout=10
This issue seems to be a regression of this resolved issue JENKINS-43106
- is related to
-
JENKINS-43106 pipeline job hangs forever at checkout GitSCM - after git rev-list (sporadic)
-
- Closed
-
- links to
[JENKINS-60536] Jenkins job hangs in Jira call after git rev-list command
If this is an instance of JENKINS-43106, then the Jira 2.5.0 plugin would be installed on the system. Libraries included in the Jira 2.5.0 plugin were causing the issue. Since you state in the environment section of the bug report that you updated all the plugins on the system, I doubt that you are running that old version of the Jira plugin. Could you provide the list of installed plugins (Manage Jenkins - System Information)?
Since you're running on Amazon EC2 with an EBS backed volume, is there any indication from the AWS reports or environment which might hint that you are exhausting some I/O limit?
When the git rev-list command hangs, are other jobs able to continue, or do they also hang?
When the git rev-list command hangs, can a user on the Jenkins master perform command line git operations still in the JENKINS_HOME directory structure? For example, can that user perform a git status or a git rev-list command in any other workspace?
If you create a similar environment on a different EC2 machine, can you see the same failure?
If you create a similar environment on a local machine, can you see the same failure?
Hi Mark,
Thanks for picking this up so quickly. I'm working with Emma on this, below is our plugin list.
It seems quite intermittent, some jobs are able to start successfully and complete once started, but others just can't seem to get started and then can't be killed.
Whilst there is a hung job, other jobs can run ok. We fire up a new EC2 slave for every job.
We are running on EC2 and EBS backed storage, but it shows no signs of unusual behaviour and our burst balance is fine.
Using the Monitoring plugin, I can see the thread for one of the hung jobs, this is what it is showing:
Name ↓ | Version | Enabled |
---|---|---|
ace-editor | 1.1 | true |
ansicolor | 0.6.2 | true |
ant | 1.10 | true |
antisamy-markup-formatter | 1.6 | true |
apache-httpcomponents-client-4-api | 4.5.10-2.0 | true |
authentication-tokens | 1.3 | true |
aws-credentials | 1.28 | true |
aws-java-sdk | 1.11.687 | true |
blueocean | 1.21.0 | true |
blueocean-autofavorite | 1.2.4 | true |
blueocean-bitbucket-pipeline | 1.21.0 | true |
blueocean-commons | 1.21.0 | true |
blueocean-config | 1.21.0 | true |
blueocean-core-js | 1.21.0 | true |
blueocean-dashboard | 1.21.0 | true |
blueocean-display-url | 2.3.0 | true |
blueocean-events | 1.21.0 | true |
blueocean-git-pipeline | 1.21.0 | true |
blueocean-github-pipeline | 1.21.0 | true |
blueocean-i18n | 1.21.0 | true |
blueocean-jira | 1.21.0 | true |
blueocean-jwt | 1.21.0 | true |
blueocean-personalization | 1.21.0 | true |
blueocean-pipeline-api-impl | 1.21.0 | true |
blueocean-pipeline-editor | 1.21.0 | true |
blueocean-pipeline-scm-api | 1.21.0 | true |
blueocean-rest | 1.21.0 | true |
blueocean-rest-impl | 1.21.0 | true |
blueocean-web | 1.21.0 | true |
bouncycastle-api | 2.17 | true |
branch-api | 2.5.5 | true |
build-pipeline-plugin | 1.5.8 | true |
build-timeout | 1.19 | true |
cloudbees-bitbucket-branch-source | 2.6.0 | true |
cloudbees-folder | 6.10.1 | true |
command-launcher | 1.4 | true |
conditional-buildstep | 1.3.6 | true |
config-file-provider | 3.6.2 | true |
credentials | 2.3.0 | true |
credentials-binding | 1.20 | true |
display-url-api | 2.3.2 | true |
docker-commons | 1.15 | true |
docker-workflow | 1.21 | true |
durable-task | 1.33 | true |
ec2 | 1.47 | true |
email-ext | 2.68 | true |
favorite | 2.3.2 | true |
git | 4.0.0 | true |
git-client | 3.0.0 | true |
git-server | 1.9 | true |
github | 1.29.5 | true |
github-api | 1.95 | true |
github-branch-source | 2.5.8 | true |
gradle | 1.35 | true |
h2-api | 1.4.199 | true |
handlebars | 1.1.1 | true |
handy-uri-templates-2-api | 2.1.8-1.0 | true |
htmlpublisher | 1.21 | true |
jackson2-api | 2.10.1 | true |
javadoc | 1.5 | true |
jaxb | 2.3.0.1 | true |
jdk-tool | 1.4 | true |
jenkins-design-language | 1.21.0 | true |
jira | 3.0.11 | true |
jira-steps | 1.5.1 | true |
jquery | 1.12.4-1 | true |
jquery-detached | 1.2.1 | true |
jsch | 0.1.55.1 | true |
junit | 1.28 | true |
ldap | 1.21 | true |
lockable-resources | 2.7 | true |
mailer | 1.29 | true |
matrix-auth | 2.5 | true |
matrix-project | 1.14 | true |
maven-plugin | 3.4 | true |
mercurial | 2.8 | true |
momentjs | 1.1.1 | true |
monitoring | 1.80.0 | true |
node-iterator-api | 1.5.0 | true |
nodejs | 1.3.4 | true |
parameterized-trigger | 2.36 | true |
performance | 3.17 | true |
pipeline-aws | 1.39 | true |
pipeline-build-step | 2.10 | true |
pipeline-github-lib | 1.0 | true |
pipeline-graph-analysis | 1.10 | true |
pipeline-input-step | 2.11 | true |
pipeline-maven | 3.8.2 | true |
pipeline-milestone-step | 1.3.1 | true |
pipeline-model-api | 1.5.0 | true |
pipeline-model-declarative-agent | 1.1.1 | true |
pipeline-model-definition | 1.5.0 | true |
pipeline-model-extensions | 1.5.0 | true |
pipeline-rest-api | 2.12 | true |
pipeline-stage-step | 2.3 | true |
pipeline-stage-tags-metadata | 1.5.0 | true |
pipeline-stage-view | 2.12 | true |
plain-credentials | 1.5 | true |
pubsub-light | 1.13 | true |
resource-disposer | 0.14 | true |
run-condition | 1.2 | true |
saml | 1.1.4 | true |
scm-api | 2.6.3 | true |
script-security | 1.68 | true |
slack | 2.35 | true |
sonar | 2.10 | true |
sse-gateway | 1.20 | true |
ssh-agent | 1.17 | true |
ssh-credentials | 1.18 | true |
ssh-slaves | 1.31.0 | true |
structs | 1.20 | true |
test-results-analyzer | 0.3.5 | true |
timestamper | 1.10 | true |
token-macro | 2.10 | true |
trilead-api | 1.0.5 | true |
variant | 1.3 | true |
workflow-aggregator | 2.6 | true |
workflow-api | 2.38 | true |
workflow-basic-steps | 2.18 | true |
workflow-cps | 2.78 | true |
workflow-cps-global-lib | 2.15 | true |
workflow-durable-task-step | 2.35 | true |
workflow-job | 2.36 | true |
workflow-multibranch | 2.21 | true |
workflow-scm-step | 2.9 | true |
workflow-step-api | 2.21 | true |
workflow-support | 3.3 | true |
ws-cleanup | 0.38 | true |
We can also run git commands just fine in the workspace directory of the job that is trying to be run.
We also just had a case of a job managing to get past the master checkout and assigned a slave and then hung in the same place doing the rev-list on the slave.
Based on a comparison of your installed plugins and my installed plugins, you might consider the following as ways to explore the problem further. I don't have any reason to believe that any of these are the root of the problem, I'm just guessing in an attempt to further explore what might be causing the issue.
Wild Guesses
- The jira-steps plugin is installed in your environment and not in mine. Since a different jira plugin was deeply involved in
JENKINS-43106, you might attempt to remove the jira-steps plugin to see if that helps - The build-pipeline-plugin is installed in your environment and not in mine. It has a known security issue that should be unrelated to this issue. However, if you can remove that plugin without harming your users, it may be worth the attempt
- The test-results-analyzer plugin is installed in your environment and not in mine. I don't see any reason that would affect this case, since it seems to be a presentation and reporting plugin
Tracked down another locked up thread and it does indeed look like Jira:
Executor #-1 for master : executing feature/acceptance-local #541 org.apache.http.nio.reactor.ssl.SSLIOSession.close(SSLIOSession.java:605) org.apache.http.impl.nio.NHttpConnectionBase.close(NHttpConnectionBase.java:511) org.apache.http.impl.nio.conn.CPoolEntry.closeConnection(CPoolEntry.java:75) org.apache.http.impl.nio.conn.CPoolEntry.close(CPoolEntry.java:101) org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:423) org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:280) org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.java:295) org.apache.http.impl.nio.client.AbstractClientExchangeHandler.requestConnection(AbstractClientExchangeHandler.java:377) org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:129) org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:141) org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:75) org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:108) com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.execute(SettableFuturePromiseHttpPromiseAsyncClient.java:36) com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.doExecute(ApacheAsyncHttpClient.java:417) com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.execute(ApacheAsyncHttpClient.java:364) com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.execute(DefaultRequest.java:297) com.atlassian.jira.rest.client.internal.async.AtlassianHttpClientDecorator$AuthenticatedRequestBuilder.execute(AtlassianHttpClientDecorator.java:83) com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.get(DefaultRequest.java:253) com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient.getAndParse(AbstractAsynchronousRestClient.java:69) com.atlassian.jira.rest.client.internal.async.AsynchronousSearchRestClient.searchJqlImplGet(AsynchronousSearchRestClient.java:109) com.atlassian.jira.rest.client.internal.async.AsynchronousSearchRestClient.searchJql(AsynchronousSearchRestClient.java:94) hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:196) hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:136) io.jenkins.blueocean.service.embedded.jira.JiraSCMListener.onChangeLogParsed(JiraSCMListener.java:52) org.jenkinsci.plugins.workflow.job.WorkflowRun.onCheckout(WorkflowRun.java:853) org.jenkinsci.plugins.workflow.job.WorkflowRun.access$1000(WorkflowRun.java:133) org.jenkinsci.plugins.workflow.job.WorkflowRun$SCMListenerImpl.onCheckout(WorkflowRun.java:1116) org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:140) org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:155) org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:69) org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:299) hudson.model.ResourceController.execute(ResourceController.java:97) hudson.model.Executor.run(Executor.java:428)
I think it's the bit that parses the changelog and tries to link to Jira issues.
Interesting and very encouraging. If that is a Jenkins pipeline job, you might insert an echo statement after the checkout scm step so that you have evidence that the checkout completed and the hang is in a different location that is unrelated to the git plugin.
Have removed the Jira site and all is working again. Put it back in, stuff breaks. So I think I've proven it, but I have no idea why it is locking up. It's like there is no timeout in the Jira query.
I have both the Jira steps and the Jira plugin installed. On the configuration screen you can do a connection test on the Jira steps plugin and it works just fine (I've got it configured with basic auth), but on the Jira plugin "validate settings" button it just ends up timing out with a 504 gateway timeout after 1 minute. Same credentials, same URL. So the connection method the Jira plugin is using under the hood must be different I guess?
We saw this issue manifest in jobs also hanging at "Started by user" with the only thing in the console log. We have repro on fully updated 2.210 system with Jira plugin running 3.0.11.
By dumping the java threads (sudo jstack <pid> > jstack-out.txt) we discovered the following thread consuming a high amount of CPU. We were able to see the issue start on ~12/18/2019 after no changes to our master or the plugins. This was easily seen based on CPU history logs which show the system would consume a full CPU when it was hung.
By removing the config file hudson.plugins.jira.JiraGlobalConfiguration.xml and restarting it resolved the issue.
// "Handling GET /job/App/job/master/3/ from 172.30.4.236 : qtp328638398-38531 WorkflowRun/index.jelly GitChangeSetList/digest.jelly" #38531 prio=5 os_prio=0 cpu=58.61ms elapsed=2320.00s tid=0x00007f446840b800 nid=0x23a3 waiting on condition [0x00007f440703d000]"Handling GET /job/App/job/master/3/ from 172.30.4.236 : qtp328638398-38531 WorkflowRun/index.jelly GitChangeSetList/digest.jelly" #38531 prio=5 os_prio=0 cpu=58.61ms elapsed=2320.00s tid=0x00007f446840b800 nid=0x23a3 waiting on condition [0x00007f440703d000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@11.0.5/Native Method) - parking to wait for <0x00000006bfcf6888> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) at java.util.concurrent.locks.LockSupport.park(java.base@11.0.5/LockSupport.java:194) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(java.base@11.0.5/AbstractQueuedSynchronizer.java:885) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(java.base@11.0.5/AbstractQueuedSynchronizer.java:917) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@11.0.5/AbstractQueuedSynchronizer.java:1240) at java.util.concurrent.locks.ReentrantLock.lock(java.base@11.0.5/ReentrantLock.java:267) at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:278) at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.java:295) at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.requestConnection(AbstractClientExchangeHandler.java:377) at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:129) at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:141) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:75) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:108) at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.execute(SettableFuturePromiseHttpPromiseAsyncClient.java:36) at com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.doExecute(ApacheAsyncHttpClient.java:417) at com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.execute(ApacheAsyncHttpClient.java:364) at com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.execute(DefaultRequest.java:297) at com.atlassian.jira.rest.client.internal.async.AtlassianHttpClientDecorator$AuthenticatedRequestBuilder.execute(AtlassianHttpClientDecorator.java:83) at com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.get(DefaultRequest.java:253) at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient.getAndParse(AbstractAsynchronousRestClient.java:69) at com.atlassian.jira.rest.client.internal.async.AsynchronousProjectRestClient.getAllProjects(AsynchronousProjectRestClient.java:61) at hudson.plugins.jira.JiraRestService.getProjectsKeys(JiraRestService.java:182) at hudson.plugins.jira.JiraSession.getProjectKeys(JiraSession.java:65) at hudson.plugins.jira.JiraSite.getProjectKeys(JiraSite.java:815) at hudson.plugins.jira.JiraChangeLogAnnotator.hasProjectForIssue(JiraChangeLogAnnotator.java:146) at hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:75) at hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:252) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.5/Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.5/NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.5/DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(java.base@11.0.5/Method.java:566) at org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125) at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314) at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185) at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:74) at org.apache.commons.jelly.expression.ExpressionSupport.evaluateRecurse(ExpressionSupport.java:61) at org.apache.commons.jelly.expression.ExpressionSupport.evaluateAsString(ExpressionSupport.java:46) at org.apache.commons.jelly.tags.core.ExprTag.doTag(ExprTag.java:42) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.OtherwiseTag.doTag(OtherwiseTag.java:41) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.OtherwiseTag.doTag(OtherwiseTag.java:41) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53) at org.kohsuke.stapler.jelly.ScriptInvoker.execute(ScriptInvoker.java:56) at org.kohsuke.stapler.jelly.ScriptInvoker.execute(ScriptInvoker.java:43) at org.kohsuke.stapler.Facet.handleIndexRequest(Facet.java:282) at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:99) at org.kohsuke.stapler.IndexViewDispatcher.dispatch(IndexViewDispatcher.java:32) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878) at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:456) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878) at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:280) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878) at org.kohsuke.stapler.MetaClass$4.doDispatch(MetaClass.java:280) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:747) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:878) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:676) 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:760) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154) at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:246) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:76) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:105) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 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:118) 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:1604) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:512) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1592) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1562) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:500) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386) at org.eclipse.jetty.server.HttpChannel$$Lambda$175/0x00000008403e7840.dispatch(Unknown Source) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:562) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938) at java.lang.Thread.run(java.base@11.0.5/Thread.java:834)
Locked ownable synchronizers: - <0x000000060ab49f70> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
A new Jira integration has been created by Atlassian. You might consider trying the new integration, available from https://plugins.jenkins.io/atlassian-jira-software-cloud . A blog post announcing the new plugin will likely be published early in 2020.
Hello markewaite
Thanks for the news, and the pointers.
This new plugin only handles build and deployment informations. My company uses the legacy Jira plugin to add comments on issues, and also the jira-steps plugin to enforce our workflow. I do not see how I will do this with this new plugin, until all these features are implemented on it. And I also think I am not alone with these usecases.
This new Jira plugin is too young enough, and not complete enough to be considered as a drop in remplacement for the legacy Jira one. Plus the legacy is a hard dependency for blue ocean.
Thanks. You are correct. I had not read enough of the details of the new Jira plugin from Atlassian.
We've being seeing much the same problem stack that Kieran reported, trying to progress issues by a workflow action in Jira. We first became aware of the problem on 20/12/2019.
The locking thread:
"Handling GET /view/Pipelines/job/.../457/ from a.b.c.d : qtp64133603-15 AbstractBuild/index.jelly SubversionChangeLogS et/digest.jelly" #15 prio=5 os_prio=0 cpu=8985.66ms elapsed=5244.95s tid=0x0000000064d07000 nid=0x1fdc waiting for monitor entry [0 x00000000665b7000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.http.nio.reactor.ssl.SSLIOSession.close(SSLIOSession.java:605) - waiting to lock <0x000000008613f660> (a org.apache.http.nio.reactor.ssl.SSLIOSession) at org.apache.http.impl.nio.NHttpConnectionBase.close(NHttpConnectionBase.java:511) at org.apache.http.impl.nio.conn.CPoolEntry.closeConnection(CPoolEntry.java:75) at org.apache.http.impl.nio.conn.CPoolEntry.close(CPoolEntry.java:101) at org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:423) at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:280) at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.j ava:295) at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.requestConnection(AbstractClientExchangeHandler.java:377) at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:129) at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:141) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:75) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:108) at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.execute(SettableFuturePromiseH ttpPromiseAsyncClient.java:36) at com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.doExecute(ApacheAsyncHttpClient.java:417) at com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.execute(ApacheAsyncHttpClient.java:364) at com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.execute(DefaultRequest.java:297) at com.atlassian.jira.rest.client.internal.async.AtlassianHttpClientDecorator$AuthenticatedRequestBuilder.execute(AtlassianH ttpClientDecorator.java:83) at com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.get(DefaultRequest.java:253) at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient.getAndParse(AbstractAsynchronousRestClient.j ava:69) at com.atlassian.jira.rest.client.internal.async.AsynchronousIssueRestClient.getIssue(AsynchronousIssueRestClient.java:186) at com.atlassian.jira.rest.client.internal.async.AsynchronousIssueRestClient.getIssue(AsynchronousIssueRestClient.java:177) at hudson.plugins.jira.JiraRestService.getIssue(JiraRestService.java:154) at hudson.plugins.jira.JiraSession.getIssue(JiraSession.java:126) at hudson.plugins.jira.JiraSite.lambda$getIssue$0(JiraSite.java:878) at hudson.plugins.jira.JiraSite$$Lambda$303/0x000000002262d840.call(Unknown Source) at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4767) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3568) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2350) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2313) - locked <0x000000008644f218> (a com.google.common.cache.LocalCache$StrongAccessEntry) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2228) at com.google.common.cache.LocalCache.get(LocalCache.java:3965) at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4764) at hudson.plugins.jira.JiraSite.getIssue(JiraSite.java:873) at hudson.plugins.jira.JiraChangeLogAnnotator.annotate(JiraChangeLogAnnotator.java:107) at hudson.scm.ChangeLogSet$Entry.getMsgAnnotated(ChangeLogSet.java:252) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.5/Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.5/NativeMethodAccessorImpl.java:62) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.5/DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(java.base@11.0.5/Method.java:566) at org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125) at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314) at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185) at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) ...
And a waiting thread:
"Executor #1 for master : executing deployToUAT #1619" #647 daemon prio=5 os_prio=0 cpu=436.80ms elapsed=236.46s tid=0x000000006 2b92000 nid=0x2590 waiting on condition [0x000000006644d000] java.lang.Thread.State: WAITING (parking) at jdk.internal.misc.Unsafe.park(java.base@11.0.5/Native Method) - parking to wait for <0x0000000083d46f58> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) at java.util.concurrent.locks.LockSupport.park(java.base@11.0.5/LockSupport.java:194) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(java.base@11.0.5/AbstractQueuedSynchronizer.j ava:885) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(java.base@11.0.5/AbstractQueuedSynchronizer.java:917) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@11.0.5/AbstractQueuedSynchronizer.java:1240) at java.util.concurrent.locks.ReentrantLock.lock(java.base@11.0.5/ReentrantLock.java:267) at org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:278) at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.j ava:295) at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.requestConnection(AbstractClientExchangeHandler.java:377) at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:129) at org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:141) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:75) at org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:108) at com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.execute(SettableFuturePromiseH ttpPromiseAsyncClient.java:36) at com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.doExecute(ApacheAsyncHttpClient.java:417) at com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.execute(ApacheAsyncHttpClient.java:364) at com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.execute(DefaultRequest.java:297) at com.atlassian.jira.rest.client.internal.async.AtlassianHttpClientDecorator$AuthenticatedRequestBuilder.execute(AtlassianH ttpClientDecorator.java:83) at com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.get(DefaultRequest.java:253) at com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient.getAndParse(AbstractAsynchronousRestClient.j ava:69) at com.atlassian.jira.rest.client.internal.async.AsynchronousSearchRestClient.searchJqlImplGet(AsynchronousSearchRestClient. java:109) at com.atlassian.jira.rest.client.internal.async.AsynchronousSearchRestClient.searchJql(AsynchronousSearchRestClient.java:94 ) at hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:196) at hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:136) at hudson.plugins.jira.JiraSite.progressMatchingIssues(JiraSite.java:1043) at hudson.plugins.jira.JiraIssueUpdateBuilder.perform(JiraIssueUpdateBuilder.java:105) at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:78) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:741) at hudson.model.Build$BuildExecution.build(Build.java:206) at hudson.model.Build$BuildExecution.doRun(Build.java:163) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:504) at hudson.model.Run.execute(Run.java:1853) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:427)
The problem looks to be a problem with an earlier connection in the connection pool in the HttpAsyncClient. The earlier open connection is failing to be closed before processing the new request (see the first thread stack above).
We did a couple of experiments in the jira-plugin source, and managed to find a way get the connection to complete.
The first hope was that changing the HttpClientOptions.maxConnectionsPerHost value would stop the connection pool holding the connections, but forcing this (in the code) to either 1 or 2000 had no effect - it was still trying to close the previous (now available) connection.
Instead, as a rough workaround we tried bypassing the connection pooling, by creating a new HttpAsyncClientBuilder against a new PoolingNHttpClientConnectionManager for each request. The change is fairly basic, but has enabled Jenkins to stay up so far.
The change is on this fork. (Essentially it extracts a method in the constructor, to create the HttpAsyncClientBuilder, then also calls it from doExecute().)
As mentioned, this was just a minimal/dirty change to get us up and running for now - it just bypasses connection reuse at the point of the request. For example an HttpAsyncClient without connection pooling would be cleaner.
For reference this is working against JIRA Cloud. We're not sure why the connections started failing to close, but this was enough to force our builds through for the time being.
dfrance can you submit a PR of what you've got working to https://github.com/jenkinsci/jira-plugin ?
dfrance this is affecting our team as well – same stack trace as yours. Your fix did unclog our pipelines temporarily, and then we ran into issues regarding JENKINS-56987 sometime last week which completely broke the plugin again.
The current state of the pull request for 56987 involves deleting all the apache files that you modified in your fork to get the connection to stop freezing. So now we are freezing again. It's been a long few weeks with these plugin problems!
taylornelson dfrance Take a look at: https://github.com/jenkinsci/jira-plugin/pull/213 and try it out if you want. That is a patch I have which works after the Atlassian GDPR changes in JENKINS-56987 . I'm testing this now against my JIRA Cloud setup.
One thing I did in that patch was I deleted the imported copy of the ApacheAsyncHttpClient code. I'm not sure if that was the right approach, but it allows me to get a setup that worked in my JIRA Cloud setup.
rodrigc Yes I definitely saw your pull request. Thanks for all your work on that! I built the plugin with your PR #213 yesterday morning, but this issue here persists even with your changes.
We use the plugin for anything from updating a fixVersion to adding comments on tasks, and for some reason these jobs started occasionally freezing and would require us to restart our Jenkins server to unclog the pipeline. (With the exact stack trace David has above – blocked thread cannot close HTTP connection and another thread waiting forever, etc)
I was going to combine your changes in PR 213 with David's changes on PR 207, but 207 modifies that AsyncHttpClient class that you have deleted in your PR. So now I have to choose to build a plugin that doesn't work, but doesn't freeze OR a plugin that works but freezes and blocks all of our executors – connection freeze fix or GDPR fix, respectively.
I realize I'm not contributing to the fix, I don't have any experience at all building Jenkins plugins. Just hoping my comments will give more context to the problem we are having. I'm sort of surprised this issue isn't affecting more people.
Edit: I just saw you added some commits related to the apache dependencies being updated. Will try building again
Cool, let me know how it works for you.
You can also post messages in the Gitter chat channel https://gitter.im/jenkinsci/jira-plugin
The more people who collaborate on this the better!
I pulled the latest changes from your pull request 213 and built the plugin. Unfortunately it did not work. It looks like you merged David France's changes into your PR (David's changes solved the freezing problem for me before these GDPR problems) so I'm not sure why it's not working now. Maybe 213 is still using the "default" apache dependencies instead of the custom Jira plugin ones?
Here are the details before I reboot the server again:
The BLOCKED thread:
The WAITING thread:
Just to report, we've tried merging https://github.com/rodrigc/jira-plugin/tree/jira-rest-client.version_5.2.0 across to https://github.com/xft-devs/jira-plugin
It was able to run a workflow action against Jira Cloud OK again here - the fix for JENKINS-56987 looks good, thanks. Time will tell if it is still stable with the connections...
The comment about deleting ApacheAsyncHttpClient didn't make sense during the merge. The class was still present on the jira-rest-client.version_5.2.0 branch, so the earlier change came across without a problem.
For reference, this is building, with the same test failures before and after:
[ERROR] Failures: [ERROR] hudson.plugins.jira.JiraCreateIssueNotifierTest.performFailureSuccessIssueClosedWithComponents(hudson.plugins.jira.JiraCreateIssueNotifierTest) [ERROR] Run 1: JiraCreateIssueNotifierTest.performFailureSuccessIssueClosedWithComponents:192 expected:<0> but was:<1> [ERROR] Run 2: JiraCreateIssueNotifierTest.performFailureSuccessIssueClosedWithComponents:192 expected:<0> but was:<1> [ERROR] Run 3: JiraCreateIssueNotifierTest.performFailureSuccessIssueClosedWithComponents:192 expected:<0> but was:<1> [ERROR] Run 4: JiraCreateIssueNotifierTest.performFailureSuccessIssueClosedWithComponents:192 expected:<0> but was:<1> [ERROR] Run 5: JiraCreateIssueNotifierTest.performFailureSuccessIssueClosedWithComponents:192 expected:<0> but was:<1> [INFO] [INFO] [ERROR] Tests run: 199, Failures: 1, Errors: 0, Skipped: 0
I've not investigated these deeper.
dfrance how is the plugin working for you now? Any blocked threads/stuck executors?
I merged your changes with Craig's changes and was still getting blocked threads. If it's going smoothly for you, maybe I did the merge incorrectly.
The merged version has been fine for the last week - can't see any stuck threads, To be fair though, we haven't gone back and checked if the freezing behaviour would come back without this.
The merge was pushed up to https://github.com/xft-devs/jira-plugin . If you haven't already, it may be worth trying pulling or cloning that again.
Bumping up this issue as i believe it is not solved with 3.0.13 nor 3.0.15,
I remember we had a fix preparing for this issue before the Atlassian GDPR changes rolled out,
and it was working for a week with this PR https://github.com/jenkinsci/jira-plugin/pull/207
but apparently it didn't move forward a notch since then.
Our environement, jenkins 2.204.5 with open jdk 11 - Trying to connect to Jira Cloud with API Token and username
Sympthoms are
First connection after reboot works for validate and jiraSearch
But all subsequent connections threads hang at this point, with status BLOCKED on
org.apache.http.nio.reactor.ssl.SSLIOSession.close(SSLIOSession.java:605)
org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution [#2] org.apache.http.nio.reactor.ssl.SSLIOSession.close(SSLIOSession.java:605) org.apache.http.impl.nio.NHttpConnectionBase.close(NHttpConnectionBase.java:511) org.apache.http.impl.nio.conn.CPoolEntry.closeConnection(CPoolEntry.java:75) org.apache.http.impl.nio.conn.CPoolEntry.close(CPoolEntry.java:101) org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:423) org.apache.http.nio.pool.AbstractNIOConnPool.lease(AbstractNIOConnPool.java:280) org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.requestConnection(PoolingNHttpClientConnectionManager.java:295) org.apache.http.impl.nio.client.AbstractClientExchangeHandler.requestConnection(AbstractClientExchangeHandler.java:377) org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.start(DefaultClientExchangeHandlerImpl.java:129) org.apache.http.impl.nio.client.InternalHttpAsyncClient.execute(InternalHttpAsyncClient.java:141) org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:75) org.apache.http.impl.nio.client.CloseableHttpAsyncClient.execute(CloseableHttpAsyncClient.java:108) com.atlassian.httpclient.apache.httpcomponents.SettableFuturePromiseHttpPromiseAsyncClient.execute(SettableFuturePromiseHttpPromiseAsyncClient.java:38) com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.doExecute(ApacheAsyncHttpClient.java:417) com.atlassian.httpclient.apache.httpcomponents.ApacheAsyncHttpClient.execute(ApacheAsyncHttpClient.java:364) com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.execute(DefaultRequest.java:297) com.atlassian.jira.rest.client.internal.async.AtlassianHttpClientDecorator$AuthenticatedRequestBuilder.execute(AtlassianHttpClientDecorator.java:83) com.atlassian.httpclient.apache.httpcomponents.DefaultRequest$DefaultRequestBuilder.get(DefaultRequest.java:253) com.atlassian.jira.rest.client.internal.async.AbstractAsynchronousRestClient.getAndParse(AbstractAsynchronousRestClient.java:69) com.atlassian.jira.rest.client.internal.async.AsynchronousSearchRestClient.searchJqlImplGet(AsynchronousSearchRestClient.java:109) com.atlassian.jira.rest.client.internal.async.AsynchronousSearchRestClient.searchJql(AsynchronousSearchRestClient.java:94) hudson.plugins.jira.JiraRestService.getIssuesFromJqlSearch(JiraRestService.java:206) hudson.plugins.jira.JiraSession.getIssuesFromJqlSearch(JiraSession.java:136) hudson.plugins.jira.pipeline.SearchIssuesStep$SearchStepExecution.run(SearchIssuesStep.java:84) hudson.plugins.jira.pipeline.SearchIssuesStep$SearchStepExecution.run(SearchIssuesStep.java:61) org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47) hudson.security.ACL.impersonate(ACL.java:290) org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44) java.base@11.0.6/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) java.base@11.0.6/java.util.concurrent.FutureTask.run(FutureTask.java:264) java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.base@11.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) java.base@11.0.6/java.lang.Thread.run(Thread.java:834)
Issue looks similar to taylornelson's
Any help would be appreciated,
I'm willing to fix and build from source given some pointers
Using this fork you guys made at https://github.com/xft-devs/jira-plugin
The issue looks fixed or at least
Our use cases with Jenkins pipeline JiraSearch and JiraIssueUpdater against Jira Cloud work fine.
No more threads hanging or blocked
To be able to build this fork, i had to change a few versions in the pom.xml
configuration-as-code.version from 1.8 to 1.36 jackson2-api from 2.8.11.2 to 2.10.2 io.jenkins.configuration-as-code to io.jenkins.configuration-as-code.test-harness junit from 1.3 to 1.20 org.jenkins-ci.plugins.credentials from 2.1.19 to 2.2.1
These versions changes match the https://github.com/jenkinsci/jira-plugin branch feature/4.0 changes
Same here, modifications from xft-devs solve issue. Thanks to them !
I rebase theirs changes on master, here is the PR : https://github.com/jenkinsci/jira-plugin/pull/230
Is there any timeline on when the changes in https://github.com/jenkinsci/jira-plugin/pull/230 will be released? Not being able to integrate with Jira is big limitation in our workflow.
Pleased to report this was looking stable just now. This was with the 3.0.17 release. Many thanks.
Upgraded to the latest version of Jenkins 2.209 and within 5 minutes of running the new version the issue has occurred again.
You cannot stop/kill the job once it gets into this state. When restarting, the job ceases to exist