Project

General

Profile

Actions

Bug #38003

closed

Deleting a CV version does not scale when a product has too many repos (cloned in CVs)

Added by Pavel Moravec about 1 month ago. Updated 20 days ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Content Views
Target version:

Description

Description of problem:
Having a product with many repos that each repo is in many CV versions, an attempt to delete a bigger CV version (of say 100 repos) takes a lot of time and memory.

In a customer story behind this, puma worker planning a foreman task consumed 11GB memory.

On my reproducer, I got 6-8GB easily, and the planning took 15 minutes.

With a simple change, the memory consumption can be reduced to 200MB-ish of RAM and to 20ish seconds.
 
The key "not scalling well" factor is https://github.com/Katello/katello/blob/master/app/lib/actions/katello/repository/destroy.rb#L72-L77 during deletion of a repository.

Replacing that cycle by a single ActiveRecord query prevents manipulation with individual repository objects and save a lot of time+space.

How reproducible:
100%
 

{*}Is this issue a regression from an earlier version:{*}
yes (performance regression since ACS feature added)
 

Steps to Reproduce:

1. Create a product with 200 repos: {code}
hammer product create --organization-id 1 --name ZOO_product
for i in $(seq 1 200); do
echo "repository create --organization-id 1 --product ZOO_product --name ZOO_repo_${i} --content-type yum --download-policy on_demand --url https://repos.fedorapeople.org/repos/pulp/pulp/demo_repos/zoo/"
done | hammer shell {code}

2. Create one CV with 100 of the repos:

{code}
hammer content-view create --organization-id 1 --name CV_zoo_manyrepos
for i in $(seq 1 100); do
echo "content-view add-repository --organization-id 1 --name CV_zoo_manyrepos --product ZOO_product --repository ZOO_repo_${i}"
done | hammer shell {code}

3. Create another CV with all the 200 repos (or even with completely disjunct set of repos, like "seq 101 200"): {code}
hammer content-view create --organization-id 1 --name CV_zoo_HUGErepos
for i in $(seq 1 200); do
echo "content-view add-repository --organization-id 1 --name CV_zoo_HUGErepos --product ZOO_product --repository ZOO_repo_${i}"
done | hammer shell {code}

4. Publish some versions of both CVs - the more the better: {code}
for i in $(seq 1 10); do
echo "content-view publish --organization-id 1 --name CV_zoo_manyrepos"
echo "content-view publish --organization-id 1 --name CV_zoo_HUGErepos"
done | hammer shell {code}

5. Restart `foreman` service to see memory usage required to process below request.

6. Delete either CV version, e.g. via WebUI.

7. Monitor memory usage of puma workers, and spot in /var/log/foreman/production.log:

{code}
2024-11-11T15:21:53 [I|app|05628762] Started PUT "/katello/api/content_views/107/bulk_delete_versions" for ::1 at 2024-11-11 15:21:53 +0100
2024-11-11T15:21:53 [I|app|05628762] Processing by Katello::Api::V2::ContentViewsController#bulk_delete_versions as JSON
2024-11-11T15:21:53 [I|app|05628762] Parameters: {"bulk_content_view_version_ids"=>{"included"=>{"ids"=>[2492]}, "excluded"=>{}}, "id"=>"107", "content_view"=>{"id"=>"107"}, "api_version"=>"v2"}
..
2024-11-11T15:32:55 [I|app|05628762] Completed 202 Accepted in 662543ms (Views: 98.4ms | ActiveRecord: 20959.9ms | Allocations: 222030027) {code}

Spot the PUT request and its duration and Allocations.

Actual behavior:
Planning the task takes many minutes (662 seconds in above example) and consumes >5GB memory (much depends on scaling).

{*}Expected behavior:{*}
Planning takes less than a minute, low memory usage of puma process.

{*}Business Impact / Additional info:{*}
I will provide a patch / PR soon.

Actions #1

Updated by The Foreman Bot about 1 month ago

  • Status changed from New to Ready For Testing
  • Assignee set to Pavel Moravec
  • Pull request https://github.com/Katello/katello/pull/11214 added
Actions #2

Updated by Partha Aji about 1 month ago

  • Target version changed from Katello 4.15.0 to Katello 4.14.2
  • Triaged changed from No to Yes
Actions #3

Updated by The Foreman Bot 27 days ago

  • Fixed in Releases Katello 4.16.0 added
Actions #4

Updated by Chris Roberts 27 days ago

  • Category set to Content Views
  • Status changed from Ready For Testing to Closed
Actions #5

Updated by The Foreman Bot 27 days ago

  • Pull request https://github.com/Katello/katello/pull/11237 added
Actions #6

Updated by The Foreman Bot 20 days ago

  • Pull request https://github.com/Katello/katello/pull/11242 added
Actions #7

Updated by Chris Roberts 20 days ago

  • Fixed in Releases Katello 4.14.2 added
Actions #8

Updated by The Foreman Bot 20 days ago

  • Fixed in Releases Katello 4.15.1 added
Actions

Also available in: Atom PDF