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

Deadlock: View.getACL → View.getProperties vs. ListView.doCreateItem → Jenkins.save

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Component/s: core
    • Labels:
    • Environment:
      1.466.2 with custom AuthorizationStrategy plugin (CloudBees RBAC).
    • Similar Issues:

      Description

      Encountered repeated deadlocks between a thread handling GET /view/something/:

      at hudson.model.View.getProperties(View.java:258)
      - waiting to lock <0x00000000c944da28> (a hudson.plugins.view.dashboard.Dashboard)
      at <some AuthorizationStrategy>.getACL(…)
      at hudson.model.View.getACL(View.java:495)
      at hudson.model.View.hasPermission(View.java:503)
      at hudson.model.ViewGroupMixIn.getViews(ViewGroupMixIn.java:115)
      at jenkins.model.Jenkins.getViews(Jenkins.java:1406)
      - locked <0x00000000c7e605f8> (a hudson.model.Hudson)
      …
      

      and a thread handling POST /view/somethingelse/createItem:

      at jenkins.model.Jenkins.save(Jenkins.java:2551)
      - waiting to lock <0x00000000c7e605f8> (a hudson.model.Hudson)
      at hudson.model.ListView.doCreateItem(ListView.java:202)
      - locked <0x00000000c944da28> (a hudson.plugins.view.dashboard.Dashboard)
      …
      

      Unclear whether the authorization plugin should be restricted in what it may call during getACL (in this case there is no apparent way to avoid using View.getProperties), but that aside:

      1. Jenkins.getViews is synchronized for no clear reason. Other methods working on viewGroupMixIn such as addView are not; and views is already a CopyOnWriteArrayList which ought to thread-safe.
      2. View.getProperties synchronizes on this when it could use a finer-grained lock.

        Attachments

          Activity

          Hide
          jglick Jesse Glick added a comment -

          Problem #1 already fixed in d2699b4.

          Show
          jglick Jesse Glick added a comment - Problem #1 already fixed in d2699b4.
          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in jenkins
          User: Jesse Glick
          Path:
          changelog.html
          core/src/main/java/hudson/model/View.java
          http://jenkins-ci.org/commit/jenkins/7a552e8e0209043e6b03951699dcbc16dfbbe082
          Log:
          [FIXED JENKINS-15368] Make View.getProperties synchronize on a safer monitor.

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: changelog.html core/src/main/java/hudson/model/View.java http://jenkins-ci.org/commit/jenkins/7a552e8e0209043e6b03951699dcbc16dfbbe082 Log: [FIXED JENKINS-15368] Make View.getProperties synchronize on a safer monitor.
          Hide
          dogfood dogfood added a comment -

          Integrated in jenkins_main_trunk #1962
          [FIXED JENKINS-15368] Make View.getProperties synchronize on a safer monitor. (Revision 7a552e8e0209043e6b03951699dcbc16dfbbe082)

          Result = SUCCESS
          Jesse Glick : 7a552e8e0209043e6b03951699dcbc16dfbbe082
          Files :

          • core/src/main/java/hudson/model/View.java
          • changelog.html
          Show
          dogfood dogfood added a comment - Integrated in jenkins_main_trunk #1962 [FIXED JENKINS-15368] Make View.getProperties synchronize on a safer monitor. (Revision 7a552e8e0209043e6b03951699dcbc16dfbbe082) Result = SUCCESS Jesse Glick : 7a552e8e0209043e6b03951699dcbc16dfbbe082 Files : core/src/main/java/hudson/model/View.java changelog.html

            People

            Assignee:
            jglick Jesse Glick
            Reporter:
            jglick Jesse Glick
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: