Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verifying full stack traces in deadlocks #51

Merged
merged 1 commit into from Jan 11, 2016

Conversation

jglick
Copy link
Member

@jglick jglick commented Jan 11, 2016

Saw a support bundle from someone presumably using this plugin <2.28 and was annoyed by a deadlock file which hinted at JENKINS-31614 yet lacked the crucial detail of the caller of Queue.schedule.
#41 seems to have fixed this, but included no test addition to prove it. Doing so now.

I originally fixed this against an older version of the plugin using the methods already available in Functions in Jenkins core. For some reason these do not seem to be showing full lock information in this context, though. Original display:

==============
Deadlock Found
==============
"Thread-12" Id=45 BLOCKED on java.lang.Object@7c60aaa5 owned by "Thread-11" Id=44
    at com.cloudbees.jenkins.support.timer.DeadlockTest$2.run(DeadlockTest.java:78)
    -  blocked on java.lang.Object@7c60aaa5
    at java.lang.Thread.run(Thread.java:745)


"Thread-11" Id=44 BLOCKED on java.lang.Object@72a74b59 owned by "Thread-12" Id=45
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:69)
    -  blocked on java.lang.Object@72a74b59
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    ...

After my initial attempt:

==============
Deadlock Found
==============
"Thread-11" Id=44 Group=main BLOCKED on java.lang.Object@76f6d06b owned by "Thread-12" Id=45
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:69)
    -  blocked on java.lang.Object@76f6d06b
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:67)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.firstMethod(DeadlockTest.java:63)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.run(DeadlockTest.java:59)
    at java.lang.Thread.run(Thread.java:745)


"Thread-12" Id=45 Group=main BLOCKED on java.lang.Object@28e9c20a owned by "Thread-11" Id=44
    at com.cloudbees.jenkins.support.timer.DeadlockTest$2.run(DeadlockTest.java:78)
    -  blocked on java.lang.Object@28e9c20a
    at java.lang.Thread.run(Thread.java:745)

Current plugin output:

==============
Deadlock Found
==============
"Thread-12" id=45 (0x2d) state=BLOCKED cpu=0%
    - waiting to lock <0x3847f429> (a java.lang.Object)
      owned by "Thread-11" id=44 (0x2c)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$2.run(DeadlockTest.java:81)
    at java.lang.Thread.run(Thread.java:745)

"Thread-11" id=44 (0x2c) state=BLOCKED cpu=0%
    - waiting to lock <0x40826664> (a java.lang.Object)
      owned by "Thread-12" id=45 (0x2d)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:72)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.secondMethod(DeadlockTest.java:70)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.firstMethod(DeadlockTest.java:66)
    at com.cloudbees.jenkins.support.timer.DeadlockTest$1.run(DeadlockTest.java:62)
    at java.lang.Thread.run(Thread.java:745)

@reviewbybees esp. @stephenc, @christ66

@ghost
Copy link

ghost commented Jan 11, 2016

This pull request originates from a CloudBees employee. At CloudBees, we require that all pull requests be reviewed by other CloudBees employees before we seek to have the change accepted. If you want to learn more about our process please see this explanation.

@stephenc
Copy link
Member

🐝

@jenkinsadmin
Copy link
Member

Thank you for this pull request! Please check this document for how the Jenkins project handles pull requests.

@andresrc
Copy link
Contributor

🐝

jglick added a commit that referenced this pull request Jan 11, 2016
Verifying full stack traces in deadlocks
@jglick jglick merged commit 37e5aa0 into jenkinsci:master Jan 11, 2016
@jglick jglick deleted the DeadlockTest branch January 11, 2016 17:52
@christ66
Copy link
Member

@jglick Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
5 participants