Uploaded image for project: 'Satellite'
  1. Satellite
  2. SAT-25503

Update Content Counts task does not scale at all

XMLWordPrintable

    • Sprint 134, Sprint 135
    • Moderate
    • Automated
    • No

      Description of problem:
      After a successful Capsule sync, Update Content Counts task is triggered. It updates content statistics of each and every repository on the Capsule.

      That does not scale at all. If one promotes a small CV to a LE, a new Capsule Sync is triggered (by default) which sycnhronizes to the Capsule just the repos from the CV/LE. But content stats of all repos are updated.

      Version-Release number of selected component (if applicable):
      Sat 6.15

      How reproducible:
      100%

      Steps to Reproduce:
      1. Have multiple CVs promoted to an LV associated to a Capsule
      2. Have the Capsule fully synchronized
      3. Promote a new CV to the LE and let automatically sync the content to the Capsule
      4. See duration of the "Update Content Counts" task.
      5. Run Complete Capsule Sync, just for the sake of comparing the time of "Update Content Counts" task duration.
      6. Optionally, add to app/models/katello/concerns/smart_proxy_extensions.rb one extra log (at the beginning of whole reproducer):

      def update_content_counts!

      1. {:content_view_versions=>{87=>{:repositories=>{1=>{:metadata=>{},:counts=>{:rpms=>98, :module_streams=>9898}}}}}
        new_content_counts = { content_view_versions: {} }
        smart_proxy_helper = ::Katello::SmartProxyHelper.new(self)
        repos = smart_proxy_helper.repositories_available_to_capsule
        Rails.logger.info("XXX update_content_counts for Capsule #{self}: repos:#{repos.pluck(:id)}")

      Actual results:
      Duration of "Update Content Counts" task is the same in cases 4. and 5 (and is linear to # repos on Capsule, not # of repos newly synced).

      Optional step 6 shows that despite Capsule Sync updated just one repo, all repos are recalculated.

      Expected results:
      "Update Content Counts" task duration relevant to the size of repos just synced to the Capsule.

      Additional info:

      required fix:
      1) app/lib/actions/katello/capsule_content/sync_capsule.rb :
      execution_plan_hooks.use :update_content_counts, :on => :success

      needs some enhancement to pass "repos = repos_to_sync(..) list from planning step as an argument

      2) That argument needs to pass via app/lib/actions/katello/capsule_content/update_content_counts.rb task to app/models/katello/concerns/smart_proxy_extensions.rb, method update_content_counts!

            rhn-engineering-sajha Samir Jha
            rhn-support-pmoravec Pavel Moravec
            Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: