Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-29164

Permission checks for Notifications slows down page operations

    XMLWordPrintable

Details

    Description

      Steps to Reproduce

      Create a space and add 2000+ watchers to it. Enable page profiling and after that, try to create a page or publish a blog post. Notice that the page creation and blog post publish can take a long time (sometimes even 200+ seconds) . In the profiling logs you will see thousands of these:

      [0ms] - Parse: templates/email/html/includes/header.vm
                  [0ms] - Parse: templates/email/html/includes/header-styles.vm
                  [0ms] - Parse: templates/email/html/includes/header-body-start.vm
                  [0ms] - Parse: templates/email/html/includes/title.vm
                [0ms] - Parse: templates/email/html/includes/footer-links.vm
                [0ms] - Parse: templates/email/html/includes/footer.vm
              [14ms] - UserAccessor.getUser()
              [0ms] - UserAccessor.isDeactivated()
              [66ms] - PermissionManager.hasPermissionNoExemptions()
                [31ms] - UserAccessor.hasMembership()
                [24ms] - DefaultSpacePermissionManager.hasPermission(USECONFLUENCE, test@test.com, global)
                  [0ms] - UserAccessor.isDeactivated()
                  [0ms] - UserAccessor.getGroup()
                  [0ms] - UserAccessor.hasMembership()
                  [0ms] - UserAccessor.getGroup()
                  [1ms] - UserAccessor.hasMembership()
                [0ms] - UserAccessor.hasMembership()
                [11ms] - DefaultSpacePermissionManager.hasPermission(VIEWSPACE, test@test.com, it)
                  [1ms] - UserAccessor.getGroup()
                  [0ms] - UserAccessor.hasMembership()
                  [0ms] - UserAccessor.getGroup()
                  [0ms] - UserAccessor.hasMembership()
              [22ms] - UserAccessor.getConfluenceUserPreferences()
              [0ms] - UserAccessor.getPropertySet()
              [0ms] - UserAccessor.getUser()
              [0ms] - UserAccessor.getPropertySet()
              [0ms] - FormatSettingsManager.getDateFormat()
              [0ms] - FormatSettingsManager.getDateTimeFormat()
              [0ms] - FormatSettingsManager.getTimeFormat()
              [0ms] - FormatSettingsManager.getDateFormat()
              [0ms] - FormatSettingsManager.getDateTimeFormat()
              [0ms] - FormatSettingsManager.getEditorBlogPostDate()
              [12ms] - LikeManager.hasLike()
              [12ms] - PermissionManager.hasCreatePermission()
                [0ms] - UserAccessor.hasMembership()
                [0ms] - UserAccessor.hasMembership()
                [11ms] - DefaultSpacePermissionManager.hasPermission(COMMENT, test@test.com, it)
                  [0ms] - UserAccessor.getGroup()
                  [0ms] - UserAccessor.hasMembership()
                  [0ms] - UserAccessor.getGroup()
                  [0ms] - UserAccessor.hasMembership()
              [1ms] - Rendering velocity template: /styles/default-inline-css.vm
                [0ms] - Parse: /styles/colors-css.vm
                  [0ms] - Parse: /styles/aui-overrides-css.vm
                  [0ms] - Parse: /styles/labels-css.vm
                  [0ms] - Parse: /styles/diffs-css.vm
              [3ms] - Rendering velocity template: /templates/email/html/page-added-notification.vm
                [0ms] - Parse: templates/email/html/includes/constants.vm
                [0ms] - PermissionManager.hasCreatePermission()
      

      So permission checks for all notified users of the page creation or change seems to be the culprit here. Suggest that we perform the permission checks during the mail queue flush, rather than the page creation process. In the example above, the 3 permission checks (USECONFLUENCE, VIEWSPACE and COMMENT) comes up to 24ms + 11ms + 11ms = 46ms for a single user (permission checks only). Multiply that by 2000 users, and you get a 92 second wait to complete the page creation.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              fsim Foo Sim (Inactive)
              Votes:
              11 Vote for this issue
              Watchers:
              11 Start watching this issue

              Dates

                Created:
                Updated: